Bug 30979: Add public endpoints
[koha.git] / api / v1 / swagger / swagger.yaml
1 ---
2 swagger: "2.0"
3 basePath: /api/v1
4 definitions:
5   account_line:
6     $ref: ./definitions/account_line.yaml
7   advancededitormacro:
8     $ref: ./definitions/advancededitormacro.yaml
9   allows_renewal:
10     $ref: ./definitions/allows_renewal.yaml
11   authorised_value:
12     $ref: ./definitions/authorised_value.yaml
13   authorised_value_category:
14     $ref: ./definitions/authorised_value_category.yaml
15   identity_provider:
16     "$ref": ./definitions/identity_provider.yaml
17   identity_provider_domain:
18     "$ref": ./definitions/identity_provider_domain.yaml
19   basket:
20     $ref: ./definitions/basket.yaml
21   bundle_link:
22     $ref: ./definitions/bundle_link.yaml
23   cashup:
24     $ref: ./definitions/cashup.yaml
25   checkout:
26     $ref: ./definitions/checkout.yaml
27   checkouts:
28     $ref: ./definitions/checkouts.yaml
29   checkout_availability:
30     $ref: ./definitions/checkout_availability.yaml
31   circ-rule-kind:
32     $ref: ./definitions/circ-rule-kind.yaml
33   city:
34     $ref: ./definitions/city.yaml
35   credit:
36     $ref: ./definitions/credit.yaml
37   debit:
38     $ref: ./definitions/debit.yaml
39   erm_config:
40     $ref: ./definitions/erm_config.yaml
41   erm_agreement:
42     $ref: ./definitions/erm_agreement.yaml
43   erm_eholdings_title:
44     $ref: ./definitions/erm_eholdings_title.yaml
45   erm_eholdings_package:
46     $ref: ./definitions/erm_eholdings_package.yaml
47   erm_eholdings_resource:
48     $ref: ./definitions/erm_eholdings_resource.yaml
49   erm_license:
50     $ref: ./definitions/erm_license.yaml
51   error:
52     $ref: ./definitions/error.yaml
53   fund:
54     $ref: ./definitions/fund.yaml
55   hold:
56     $ref: ./definitions/hold.yaml
57   holds:
58     $ref: ./definitions/holds.yaml
59   ill_backend:
60     $ref: ./definitions/ill_backend.yaml
61   ill_backends:
62     $ref: ./definitions/ill_backends.yaml
63   ill_status:
64     $ref: ./definitions/ill_status.yaml
65   ill_request:
66     $ref: ./definitions/ill_request.yaml
67   import_batch_profile:
68     $ref: ./definitions/import_batch_profile.yaml
69   import_batch_profiles:
70     $ref: ./definitions/import_batch_profiles.yaml
71   import_record_match:
72     $ref: ./definitions/import_record_match.yaml
73   invoice:
74     $ref: ./definitions/invoice.yaml
75   item:
76     $ref: ./definitions/item.yaml
77   item_group:
78     $ref: ./definitions/item_group.yaml
79   job:
80     $ref: ./definitions/job.yaml
81   library:
82     $ref: ./definitions/library.yaml
83   order:
84     $ref: ./definitions/order.yaml
85   patron:
86     $ref: ./definitions/patron.yaml
87   patron_account_credit:
88     $ref: ./definitions/patron_account_credit.yaml
89   patron_balance:
90     $ref: ./definitions/patron_balance.yaml
91   patron_extended_attribute:
92     $ref: ./definitions/patron_extended_attribute.yaml
93   quote:
94     $ref: ./definitions/quote.yaml
95   renewal:
96     $ref: ./definitions/renewal.yaml
97   renewals:
98     $ref: ./definitions/renewals.yaml
99   return_claim:
100     $ref: ./definitions/return_claim.yaml
101   search_filter:
102     $ref: ./definitions/search_filter.yaml
103   smtp_server:
104     $ref: ./definitions/smtp_server.yaml
105   suggestion:
106     $ref: ./definitions/suggestion.yaml
107   ticket:
108     $ref: ./definitions/ticket.yaml
109   ticket_update:
110     $ref: ./definitions/ticket_update.yaml
111   transfer_limit:
112     $ref: ./definitions/transfer_limit.yaml
113   vendor:
114     $ref: ./definitions/vendor.yaml
115 paths:
116   /acquisitions/baskets/managers:
117     $ref: paths/acquisitions_baskets.yaml#/~1acquisitions~1baskets~1managers
118   /acquisitions/funds:
119     $ref: ./paths/acquisitions_funds.yaml#/~1acquisitions~1funds
120   /acquisitions/funds/owners:
121     $ref: paths/acquisitions_funds.yaml#/~1acquisitions~1funds~1owners
122   /acquisitions/funds/users:
123     $ref: paths/acquisitions_funds.yaml#/~1acquisitions~1funds~1users
124   /acquisitions/orders:
125     $ref: ./paths/acquisitions_orders.yaml#/~1acquisitions~1orders
126   "/acquisitions/orders/{order_id}":
127     $ref: "./paths/acquisitions_orders.yaml#/~1acquisitions~1orders~1{order_id}"
128   /acquisitions/vendors:
129     $ref: ./paths/acquisitions_vendors.yaml#/~1acquisitions~1vendors
130   "/acquisitions/vendors/{vendor_id}":
131     $ref: "./paths/acquisitions_vendors.yaml#/~1acquisitions~1vendors~1{vendor_id}"
132   /advanced_editor/macros:
133     $ref: ./paths/advancededitormacros.yaml#/~1advanced_editor~1macros
134   /advanced_editor/macros/shared:
135     $ref: ./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1shared
136   /search_filters:
137     $ref: ./paths/search_filters.yaml#/~1search_filters
138   "/search_filters/{search_filter_id}":
139     $ref: "./paths/search_filters.yaml#/~1search_filters~1{search_filter_id}"
140   "/advanced_editor/macros/shared/{advancededitormacro_id}":
141     $ref: "./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1shared~1{advancededitormacro_id}"
142   "/advanced_editor/macros/{advancededitormacro_id}":
143     $ref: "./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1{advancededitormacro_id}"
144   "/article_requests/{article_request_id}":
145     $ref: "./paths/article_requests.yaml#/~1article_requests~1{article_request_id}"
146   /auth/otp/token_delivery:
147     $ref: paths/auth.yaml#/~1auth~1otp~1token_delivery
148   "/auth/password/validation":
149     $ref: "./paths/auth.yaml#/~1auth~1password~1validation"
150   /auth/two-factor/registration:
151     $ref: paths/auth.yaml#/~1auth~1two-factor~1registration
152   /auth/two-factor/registration/verification:
153     $ref: paths/auth.yaml#/~1auth~1two-factor~1registration~1verification
154   /auth/identity_providers:
155     $ref: paths/auth.yaml#/~1auth~1identity_providers
156   "/auth/identity_providers/{identity_provider_id}":
157     $ref: paths/auth.yaml#/~1auth~1identity_providers~1{identity_provider_id}
158   "/auth/identity_providers/{identity_provider_id}/domains":
159     $ref: paths/auth.yaml#/~1auth~1identity_providers~1{identity_provider_id}~1domains
160   "/auth/identity_providers/{identity_provider_id}/domains/{identity_provider_domain_id}":
161     $ref: paths/auth.yaml#/~1auth~1identity_providers~1{identity_provider_id}~1domains~1{identity_provider_domain_id}
162   /authorised_value_categories:
163     $ref: paths/authorised_value_categories.yaml#/~1authorised_value_categories
164   "/authorised_value_categories/{authorised_value_category_name}/authorised_values":
165     $ref: "./paths/authorised_values.yaml#/~1authorised_value_categories~1{authorised_value_category_name}~1authorised_values"
166   "/authorities":
167     $ref: paths/authorities.yaml#/~1authorities
168   "/authorities/{authority_id}":
169     $ref: paths/authorities.yaml#/~1authorities~1{authority_id}
170   "/biblios":
171     $ref: "./paths/biblios.yaml#/~1biblios"
172   "/biblios/{biblio_id}":
173     $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}"
174   "/biblios/{biblio_id}/checkouts":
175     $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1checkouts"
176   "/biblios/{biblio_id}/items":
177     $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1items"
178   "/biblios/{biblio_id}/items/{item_id}":
179     $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1items~1{item_id}"
180   "/biblios/{biblio_id}/pickup_locations":
181     $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1pickup_locations"
182   "/biblios/{biblio_id}/item_groups":
183     $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups"
184   "/biblios/{biblio_id}/item_groups/{item_group_id}":
185     $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups~1{item_group_id}"
186   "/biblios/{biblio_id}/item_groups/{item_group_id}/items":
187     $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups~1{item_group_id}~1items"
188   "/biblios/{biblio_id}/item_groups/{item_group_id}/items/{item_id}":
189     $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups~1{item_group_id}~1items~1{item_id}"
190   "/cash_registers/{cash_register_id}/cashups":
191     $ref: "./paths/cash_registers.yaml#/~1cash_registers~1{cash_register_id}~1cashups"
192   "/cashups/{cashup_id}":
193     $ref: "./paths/cash_registers.yaml#/~1cashups~1{cashup_id}"
194   /checkouts:
195     $ref: ./paths/checkouts.yaml#/~1checkouts
196   "/checkouts/{checkout_id}":
197     $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}"
198   "/checkouts/{checkout_id}/allows_renewal":
199     $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1allows_renewal"
200   "/checkouts/{checkout_id}/renewals":
201     $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1renewals"
202   "/checkouts/{checkout_id}/renewal":
203     $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1renewal"
204   "/checkouts/availability":
205     $ref: "./paths/checkouts.yaml#/~1checkouts~1availability"
206   /circulation-rules/kinds:
207     $ref: ./paths/circulation-rules.yaml#/~1circulation-rules~1kinds
208   /cities:
209     $ref: ./paths/cities.yaml#/~1cities
210   "/cities/{city_id}":
211     $ref: "./paths/cities.yaml#/~1cities~1{city_id}"
212   "/clubs/{club_id}/holds":
213     $ref: "./paths/clubs.yaml#/~1clubs~1{club_id}~1holds"
214   /config/smtp_servers:
215     $ref: ./paths/config_smtp_servers.yaml#/~1config~1smtp_servers
216   "/config/smtp_servers/{smtp_server_id}":
217     $ref: "./paths/config_smtp_servers.yaml#/~1config~1smtp_servers~1{smtp_server_id}"
218   /erm/config:
219     $ref: ./paths/erm_config.yaml#/~1erm~1config
220   /erm/agreements:
221     $ref: ./paths/erm_agreements.yaml#/~1erm~1agreements
222   "/erm/agreements/{agreement_id}":
223     $ref: "./paths/erm_agreements.yaml#/~1erm~1agreements~1{agreement_id}"
224   "/erm/documents/{document_id}/file/content":
225     $ref: "./paths/erm_documents.yaml#/~1erm~1documents~1{document_id}~1file~1content"
226   "/erm/eholdings/{provider}/titles":
227     $ref: "./paths/erm_eholdings_titles.yaml#/~1erm~1eholdings~1{provider}~1titles"
228   /erm/eholdings/local/titles/import:
229     $ref: ./paths/erm_eholdings_titles.yaml#/~1erm~1eholdings~1local~1titles~1import
230   "/erm/eholdings/{provider}/titles/{title_id}":
231     $ref: "./paths/erm_eholdings_titles.yaml#/~1erm~1eholdings~1{provider}~1titles~1{title_id}"
232   "/erm/eholdings/{provider}/titles/{title_id}/resources":
233     $ref: "./paths/erm_eholdings_titles_resources.yaml#/~1erm~1eholdings~1{provider}~1titles~1{title_id}~1resources"
234   "/erm/eholdings/{provider}/packages":
235     $ref: "./paths/erm_eholdings_packages.yaml#/~1erm~1eholdings~1{provider}~1packages"
236   "/erm/eholdings/{provider}/resources":
237     $ref: "./paths/erm_eholdings_resources.yaml#/~1erm~1eholdings~1{provider}~1resources"
238   "/erm/eholdings/{provider}/resources/{resource_id}":
239     $ref: "./paths/erm_eholdings_resources.yaml#/~1erm~1eholdings~1{provider}~1resources~1{resource_id}"
240   "/erm/eholdings/{provider}/packages/{package_id}":
241     $ref: "./paths/erm_eholdings_packages.yaml#/~1erm~1eholdings~1{provider}~1packages~1{package_id}"
242   "/erm/eholdings/{provider}/packages/{package_id}/resources":
243     $ref: "./paths/erm_eholdings_packages_resources.yaml#/~1erm~1eholdings~1{provider}~1packages~1{package_id}~1resources"
244   /erm/licenses:
245     $ref: ./paths/erm_licenses.yaml#/~1erm~1licenses
246   "/erm/licenses/{license_id}":
247     $ref: "./paths/erm_licenses.yaml#/~1erm~1licenses~1{license_id}"
248   /erm/users:
249     $ref: ./paths/erm_users.yaml#/~1erm~1users
250   /holds:
251     $ref: ./paths/holds.yaml#/~1holds
252   "/holds/{hold_id}":
253     $ref: "./paths/holds.yaml#/~1holds~1{hold_id}"
254   "/holds/{hold_id}/pickup_location":
255     $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1pickup_location"
256   "/holds/{hold_id}/pickup_locations":
257     $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1pickup_locations"
258   "/holds/{hold_id}/priority":
259     $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1priority"
260   "/holds/{hold_id}/suspension":
261     $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1suspension"
262   /ill/backends:
263     $ref: ./paths/ill_backends.yaml#/~1ill~1backends
264   "/ill/backends/{ill_backend_id}":
265     $ref: "./paths/ill_backends.yaml#/~1ill~1backends~1{ill_backend_id}"
266   /ill/requests:
267     $ref: ./paths/ill_requests.yaml#/~1ill~1requests
268   "/import_batches/{import_batch_id}/records/{import_record_id}/matches/chosen":
269     $ref: "./paths/import_batches.yaml#/~1import_batches~1{import_batch_id}~1records~1{import_record_id}~1matches~1chosen"
270   /import_batch_profiles:
271     $ref: ./paths/import_batch_profiles.yaml#/~1import_batch_profiles
272   "/import_batch_profiles/{import_batch_profile_id}":
273     $ref: "./paths/import_batch_profiles.yaml#/~1import_batch_profiles~1{import_batch_profile_id}"
274   /items:
275     $ref: ./paths/items.yaml#/~1items
276   "/items/{item_id}":
277     $ref: "./paths/items.yaml#/~1items~1{item_id}"
278   "/items/{item_id}/bundled_items":
279     $ref: ./paths/items.yaml#/~1items~1{item_id}~1bundled_items
280   "/items/{item_id}/bundled_items/{bundled_item_id}":
281     $ref: ./paths/items.yaml#/~1items~1{item_id}~1bundled_items~1{bundled_item_id}
282   "/items/{item_id}/pickup_locations":
283     $ref: "./paths/items.yaml#/~1items~1{item_id}~1pickup_locations"
284   /jobs:
285     $ref: ./paths/jobs.yaml#/~1jobs
286   "/jobs/{job_id}":
287     $ref: "./paths/jobs.yaml#/~1jobs~1{job_id}"
288   /libraries:
289     $ref: ./paths/libraries.yaml#/~1libraries
290   "/libraries/{library_id}":
291     $ref: "./paths/libraries.yaml#/~1libraries~1{library_id}"
292   "/oauth/login/{provider_code}/{interface}":
293     $ref: ./paths/oauth.yaml#/~1oauth~1login~1{provider_code}~1{interface}
294   /oauth/token:
295     $ref: ./paths/oauth.yaml#/~1oauth~1token
296   /patrons:
297     $ref: ./paths/patrons.yaml#/~1patrons
298   "/patrons/{patron_id}":
299     $ref: "./paths/patrons.yaml#/~1patrons~1{patron_id}"
300   "/patrons/{patron_id}/account":
301     $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account"
302   "/patrons/{patron_id}/account/credits":
303     $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account~1credits"
304   "/patrons/{patron_id}/account/debits":
305     $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account~1debits"
306   "/patrons/{patron_id}/extended_attributes":
307     $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes"
308   "/patrons/{patron_id}/extended_attributes/{extended_attribute_id}":
309     $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes~1{extended_attribute_id}"
310   "/patrons/{patron_id}/holds":
311     $ref: "./paths/patrons_holds.yaml#/~1patrons~1{patron_id}~1holds"
312   "/patrons/{patron_id}/password":
313     $ref: "./paths/patrons_password.yaml#/~1patrons~1{patron_id}~1password"
314   "/patrons/{patron_id}/password/expiration_date":
315     $ref: "./paths/patrons_password.yaml#/~1patrons~1{patron_id}~1password~1expiration_date"
316   "/public/biblios/{biblio_id}":
317     $ref: "./paths/biblios.yaml#/~1public~1biblios~1{biblio_id}"
318   "/public/checkouts/availability":
319     $ref: ./paths/checkouts.yaml#/~1public~1checkouts~1availability
320   "/public/items":
321     $ref: "./paths/items.yaml#/~1public~1items"
322   "/public/biblios/{biblio_id}/items":
323     $ref: "./paths/biblios.yaml#/~1public~1biblios~1{biblio_id}~1items"
324   "/public/biblios/{biblio_id}/ratings":
325     $ref: "./paths/biblios.yaml#/~1public~1biblios~1{biblio_id}~1ratings"
326   /public/libraries:
327     $ref: ./paths/libraries.yaml#/~1public~1libraries
328   "/public/libraries/{library_id}":
329     $ref: "./paths/libraries.yaml#/~1public~1libraries~1{library_id}"
330   "/public/oauth/login/{provider_code}/{interface}":
331     $ref: ./paths/public_oauth.yaml#/~1public~1oauth~1login~1{provider_code}~1{interface}
332   "/public/patrons/{patron_id}/article_requests/{article_request_id}":
333     $ref: "./paths/article_requests.yaml#/~1public~1patrons~1{patron_id}~1article_requests~1{article_request_id}"
334   "/public/patrons/{patron_id}/checkouts":
335     $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1checkouts"
336   "/public/patrons/{patron_id}/guarantors/can_see_charges":
337     $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1guarantors~1can_see_charges"
338   "/public/patrons/{patron_id}/guarantors/can_see_checkouts":
339     $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1guarantors~1can_see_checkouts"
340   "/public/patrons/{patron_id}/holds/{hold_id}":
341     $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1holds~1{hold_id}"
342   "/public/patrons/{patron_id}/password":
343     $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1password"
344   "/public/tickets":
345     $ref: "./paths/tickets.yaml#/~1public~1tickets"
346   /quotes:
347     $ref: ./paths/quotes.yaml#/~1quotes
348   "/quotes/{quote_id}":
349     $ref: "./paths/quotes.yaml#/~1quotes~1{quote_id}"
350   /return_claims:
351     $ref: ./paths/return_claims.yaml#/~1return_claims
352   "/return_claims/{claim_id}":
353     $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}"
354   "/return_claims/{claim_id}/notes":
355     $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}~1notes"
356   "/return_claims/{claim_id}/resolve":
357     $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}~1resolve"
358   "/rotas/{rota_id}/stages/{stage_id}/position":
359     $ref: "./paths/rotas.yaml#/~1rotas~1{rota_id}~1stages~1{stage_id}~1position"
360   /suggestions:
361     $ref: ./paths/suggestions.yaml#/~1suggestions
362   "/suggestions/{suggestion_id}":
363     $ref: "./paths/suggestions.yaml#/~1suggestions~1{suggestion_id}"
364   /suggestions/managers:
365     $ref: paths/suggestions.yaml#/~1suggestions~1managers
366   "/tickets":
367     $ref: "./paths/tickets.yaml#/~1tickets"
368   "/tickets/{ticket_id}":
369     $ref: "./paths/tickets.yaml#/~1tickets~1{ticket_id}"
370   "/tickets/{ticket_id}/updates":
371     $ref: "./paths/tickets.yaml#/~1tickets~1{ticket_id}~1updates"
372   /transfer_limits:
373     $ref: ./paths/transfer_limits.yaml#/~1transfer_limits
374   /transfer_limits/batch:
375     $ref: ./paths/transfer_limits.yaml#/~1transfer_limits~1batch
376   "/transfer_limits/{limit_id}":
377     $ref: "./paths/transfer_limits.yaml#/~1transfer_limits~1{limit_id}"
378 parameters:
379   advancededitormacro_id_pp:
380     description: Advanced editor macro internal identifier
381     in: path
382     name: advancededitormacro_id
383     required: true
384     type: integer
385   agreement_id_pp:
386     description: Agreement internal identifier
387     in: path
388     name: agreement_id
389     required: true
390     type: integer
391   agreement_period_id_pp:
392     description: Agreement period internal identifier
393     in: path
394     name: agreement_period_id
395     required: true
396     type: integer
397   authorised_value_id_pp:
398     description: Authorised value internal identifier
399     in: path
400     name: authorised_value_id
401     required: true
402     type: integer
403   authority_id_pp:
404     description: Authority identifier
405     in: path
406     name: authority_id
407     required: true
408     type: integer
409   authority_type_header:
410     description: Authority type code. Use when content type is not application/json
411     name: x-authority-type
412     in: header
413     required: false
414     type: string
415   framework_id_header:
416     description: Framework id. Use when content type is not application/json
417     name: x-framework-id
418     in: header
419     required: false
420     type: string
421   marc_schema_header:
422     description: March schema. One of MARC21 or UNIMARC
423     name: x-record-schema
424     in: header
425     required: false
426     type: string
427     enum:
428       - MARC21
429       - UNIMARC
430   confirm_not_duplicate_header:
431     description: Confirm the posted element is not a duplicate
432     name: x-confirm-not-duplicate
433     in: header
434     required: false
435     type: integer
436   identity_provider_id_pp:
437     description: Identity provider internal identifier
438     in: path
439     name: identity_provider_id
440     required: true
441     type: integer
442   identity_provider_domain_id_pp:
443     description: Identity provider domain internal identifier
444     in: path
445     name: identity_provider_domain_id
446     required: true
447     type: integer
448   biblio_id_pp:
449     description: Record internal identifier
450     in: path
451     name: biblio_id
452     required: true
453     type: integer
454   candidate_match_id_pp:
455     description: Internal import record match identifier
456     in: path
457     name: candidate_match_id
458     required: true
459     type: integer
460   cash_register_id_pp:
461     description: Cash register internal identifier
462     in: path
463     name: cash_register_id
464     required: true
465     type: integer
466   cashup_id_pp:
467     description: Cashup internal identifier
468     in: path
469     name: cashup_id
470     required: true
471     type: integer
472   checkout_id_pp:
473     description: Internal checkout identifier
474     in: path
475     name: checkout_id
476     required: true
477     type: integer
478   city_id_pp:
479     description: City internal identifier
480     in: path
481     name: city_id
482     required: true
483     type: integer
484   club_id_pp:
485     description: Internal club identifier
486     in: path
487     name: club_id
488     required: true
489     type: integer
490   eholdings_title_id_pp:
491     description: Title internal identifier
492     in: path
493     name: title_id
494     required: true
495     type: integer
496   eholdings_package_id_pp:
497     description: Package internal identifier
498     in: path
499     name: package_id
500     required: true
501     type: string
502   eholdings_resource_id_pp:
503     description: Resource internal identifier
504     in: path
505     name: resource_id
506     required: true
507     type: string
508   fund_id_pp:
509     description: Fund id
510     in: path
511     name: fund_id
512     required: true
513     type: integer
514   hold_id_pp:
515     description: Internal hold identifier
516     in: path
517     name: hold_id
518     required: true
519     type: integer
520   import_batch_profile_id_pp:
521     description: Internal profile identifier
522     in: path
523     name: import_batch_profile_id
524     required: true
525     type: integer
526   import_record_id_pp:
527     description: Internal import record identifier
528     in: path
529     name: import_record_id
530     required: true
531     type: integer
532   item_id_pp:
533     description: Internal item identifier
534     in: path
535     name: item_id
536     required: true
537     type: integer
538   item_id_qp:
539     description: Internal item identifier
540     in: query
541     name: item_id
542     type: integer
543   job_id_pp:
544     description: Job internal identifier
545     in: path
546     name: job_id
547     required: true
548     type: integer
549   library_id_pp:
550     description: Internal library identifier
551     in: path
552     name: library_id
553     required: true
554     type: string
555   license_id_pp:
556     description: License internal identifier
557     in: path
558     name: license_id
559     required: true
560     type: integer
561   match:
562     description: Matching criteria
563     enum:
564       - contains
565       - exact
566       - starts_with
567       - ends_with
568     in: query
569     name: _match
570     required: false
571     type: string
572   order_by:
573     collectionFormat: csv
574     description: Sorting criteria
575     in: query
576     items:
577       type: string
578     name: _order_by
579     required: false
580     type: array
581   order_id_pp:
582     description: Internal order identifier
583     in: path
584     name: order_id
585     required: true
586     type: integer
587   page:
588     description: "Page number, for paginated object listing"
589     in: query
590     name: _page
591     required: false
592     type: integer
593   patron_id_pp:
594     description: Internal patron identifier
595     in: path
596     name: patron_id
597     required: true
598     type: integer
599   patron_id_qp:
600     description: Internal patron identifier
601     in: query
602     name: patron_id
603     type: integer
604   per_page:
605     description: "Page size, for paginated object listing"
606     in: query
607     name: _per_page
608     required: false
609     type: integer
610   q_body:
611     description: Query filter sent through request"s body
612     in: body
613     name: query
614     required: false
615     schema:
616       type: object
617   q_param:
618     description: Query filter sent as a request parameter
619     in: query
620     name: q
621     required: false
622     type: array
623     items:
624       type: string
625     collectionFormat: multi
626   quote_id_pp:
627     description: Quote internal identifier
628     in: path
629     name: quote_id
630     required: true
631     type: integer
632   request_id_header:
633     description: Request id header
634     in: header
635     name: x-koha-request-id
636     required: false
637     type: integer
638   search_filter_id_pp:
639     name: search_filter_id
640     in: path
641     description: Search filter internal identifier
642     required: true
643     type: integer
644   seen_pp:
645     description: Item was seen flag
646     in: query
647     name: seen
648     required: false
649     type: integer
650   smtp_server_id_pp:
651     description: SMTP server internal identifier
652     in: path
653     name: smtp_server_id
654     required: true
655     type: integer
656   suggestion_id_pp:
657     description: Internal suggestion identifier
658     in: path
659     name: suggestion_id
660     required: true
661     type: integer
662   ticket_id_pp:
663     description: Internal ticket identifier
664     in: path
665     name: ticket_id
666     required: true
667     type: integer
668   transfer_limit_id_pp:
669     description: Internal transfer limit identifier
670     in: path
671     name: limit_id
672     required: true
673     type: string
674   vendor_id_pp:
675     description: Vendor id
676     in: path
677     name: vendor_id
678     required: true
679     type: integer
680 info:
681   title: Koha REST API
682   version: "1"
683   license:
684     name: "GPL v3,"
685     url: http://www.gnu.org/licenses/gpl.txt
686   contact:
687     name: Koha Development Team
688     url: https://koha-community.org/
689   description: |
690     ## Introduction
691
692     This API is documented in **OpenAPI format**.
693
694     ## Authentication
695
696     The API supports the following authentication mechanisms
697
698     * HTTP Basic authentication
699     * OAuth2 (client credentials grant)
700     * Cookie-based
701
702     Both _Basic authentication_ and the _OAuth2_ flow, need to be enabled
703     by system preferences.
704
705     ## Errors
706
707     The API uses standard HTTP status codes to indicate the success or failure
708     of the API call. The body of the response will be JSON in the following format:
709
710     ```
711     {
712       "error": "Current settings prevent the passed due date to be applied",
713       "error_code": "invalid_due_date"
714     }
715     ```
716
717     Note: Some routes might offer additional attributes in their error responses but that"s
718     subject to change and thus not documented.
719
720     ## Filtering responses
721
722     The API allows for some advanced response filtering using a JSON based query syntax. The
723     query can be added to the requests:
724
725     * as a query parameter `q=`
726     * in the request body
727
728     For simple field equality matches we can use `{ "fieldname": "value" }` where the fieldname
729     matches one of the fields as described in the particular endpoints response object.
730
731     We can refine that with more complex matching clauses by nesting a the clause into the
732     object; `{ "fieldname": { "clause": "value" } }`.
733
734     Available matching clauses include ">", "<", ">=", "<=", "-like", and "-not_like".
735
736     We can filter on multiple fields by adding them to the JSON respresentation. Adding at `HASH`
737     level will result in an "AND" query, whilst combinding them in an `ARRAY` wilth result in an
738     "OR" query: `{ "field1": "value2", "field2": "value2" }` will filter the response to only those
739     results with both field1 containing value2 AND field2 containing value2 for example.
740
741     Additionally, if you are requesting related data be embedded into the response one can query
742     on the related data using dot notation in the field names.
743
744     ### Examples
745
746     The following request would return any patron with firstname "Henry" and lastname "Acevedo";
747
748     `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": "Acevedo", "firstname": "Henry" }"`
749
750     The following request would return any patron whose lastname begins with "Ace";
751
752     `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": { "-like": "Ace%" }"`
753
754     The following request would return any patron whose lastname is "Acevedo" OR "Bernardo"
755
756     `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": [ "Acevedo", "Bernardo" ] }"`
757
758     The following request embeds the related patron extended attributes data and filters on it.
759
760     `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" }'`
761
762     ## Special headers
763
764     ### x-koha-embed
765
766     This optional header allows the api consumer to request additional related data
767     to be returned in the api response.  It also allows for cross referencing in the
768     queries as described above. It accepts a comma delimited list of relation names.
769
770     Relations may on occasion also support dot delimited nesting to allow traversal.
771
772     ### x-koha-library
773
774     This optional header should be passed to give your api request a library
775     context; If it is not included in the request, then the request context
776     will default to using your api comsumer"s assigned home library.
777 tags:
778   - description: "Handle two factor authentication flows\n"
779     name: 2fa
780     x-displayName: Two factor authentication
781   - description: "Manage article requests\n"
782     name: article_requests
783     x-displayName: Article requests
784   - description: "Manage identity providers\n"
785     name: identity_providers
786     x-displayName: Identity providers
787   - description: "Manage baskets for the acquisitions module\n"
788     name: baskets
789     x-displayName: Baskets
790   - description: "Manage Authority records\n"
791     name: authorities
792     x-displayName: Authorities
793   - description: "Manage bibliographic records\n"
794     name: biblios
795     x-displayName: Biblios
796   - description: "Manage cash register cashups\n"
797     name: cashups
798     x-displayName: Cashups
799   - description: "Manage checkouts\n"
800     name: checkouts
801     x-displayName: Checkouts
802   - description: "Manage circulation rules\n"
803     name: circulation_rules
804     x-displayName: Circulation rules
805   - description: "Manage cities\n"
806     name: cities
807     x-displayName: Cities
808   - description: "Manage patron clubs\n"
809     name: clubs
810     x-displayName: Clubs
811   - description: "Manage funds for the acquisitions module\n"
812     name: funds
813     x-displayName: Funds
814   - description: "Manage holds\n"
815     name: holds
816     x-displayName: Holds
817   - description: "Manage ILL module backends\n"
818     name: ill_backends
819     x-displayName: ILL backends
820   - description: "Manage ILL requests\n"
821     name: ill_requests
822     x-displayName: ILL requests
823   - description: "Manage import batches\n"
824     name: import_batches
825     x-display-name: Import batches
826   - description: "Manage item groups\n"
827     name: item_groups
828     x-displayName: Item groups
829   - description: "Manage items\n"
830     name: items
831     x-displayName: Items
832   - description: "Manage jobs\n"
833     name: jobs
834     x-displayName: Jobs
835   - description: "Manage libraries\n"
836     name: libraries
837     x-displayName: Libraries
838   - description: "Manage macros\n"
839     name: macros
840     x-displayName: Macros
841   - description: "Manage acquisition orders\n"
842     name: orders
843     x-displayName: Orders
844   - description: "Handle OAuth flows\n"
845     name: oauth
846     x-displayName: OAuth
847   - description: "Manage patrons\n"
848     name: patrons
849     x-displayName: Patrons
850   - description: "Manage quotes\n"
851     name: quotes
852     x-displayName: Quotes
853   - description: "Manage return claims\n"
854     name: return_claims
855     x-displayName: Return claims
856   - description: "Manage rotas\n"
857     name: rotas
858     x-displayName: Rotas
859   - description: "Manage SMTP servers configurations\n"
860     name: smtp_servers
861     x-displayName: SMTP servers
862   - description: "Manage transfer limits\n"
863     name: transfer
864     x-displayName: Transfer limits
865   - description: "Manage purchase suggestions\n"
866     name: suggestions
867     x-displayName: Purchase suggestions
868   - description: "Manage vendors for the acquisitions module\n"
869     name: vendors
870     x-displayName: Vendors
871   - description: "Manage batch import profiles\n"
872     name: batch_import_profiles
873     x-displayName: Batch import profiles