Bug 30982: REST API specs
[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   background_job:
12     $ref: ./definitions/background_job.yaml
13   basket:
14     $ref: ./definitions/basket.yaml
15   bundle_link:
16     $ref: ./definitions/bundle_link.yaml
17   cashup:
18     $ref: ./definitions/cashup.yaml
19   checkout:
20     $ref: ./definitions/checkout.yaml
21   checkouts:
22     $ref: ./definitions/checkouts.yaml
23   circ-rule-kind:
24     $ref: ./definitions/circ-rule-kind.yaml
25   city:
26     $ref: ./definitions/city.yaml
27   error:
28     $ref: ./definitions/error.yaml
29   fund:
30     $ref: ./definitions/fund.yaml
31   hold:
32     $ref: ./definitions/hold.yaml
33   holds:
34     $ref: ./definitions/holds.yaml
35   ill_backend:
36     $ref: ./definitions/ill_backend.yaml
37   ill_backends:
38     $ref: ./definitions/ill_backends.yaml
39   import_batch_profile:
40     $ref: ./definitions/import_batch_profile.yaml
41   import_batch_profiles:
42     $ref: ./definitions/import_batch_profiles.yaml
43   import_record_match:
44     $ref: ./definitions/import_record_match.yaml
45   invoice:
46     $ref: ./definitions/invoice.yaml
47   item:
48     $ref: ./definitions/item.yaml
49   item_group:
50     $ref: ./definitions/item_group.yaml
51   library:
52     $ref: ./definitions/library.yaml
53   order:
54     $ref: ./definitions/order.yaml
55   patron:
56     $ref: ./definitions/patron.yaml
57   patron_account_credit:
58     $ref: ./definitions/patron_account_credit.yaml
59   patron_balance:
60     $ref: ./definitions/patron_balance.yaml
61   patron_extended_attribute:
62     $ref: ./definitions/patron_extended_attribute.yaml
63   quote:
64     $ref: ./definitions/quote.yaml
65   renewal:
66     $ref: ./definitions/renewal.yaml
67   renewals:
68     $ref: ./definitions/renewals.yaml
69   return_claim:
70     $ref: ./definitions/return_claim.yaml
71   smtp_server:
72     $ref: ./definitions/smtp_server.yaml
73   suggestion:
74     $ref: ./definitions/suggestion.yaml
75   transfer_limit:
76     $ref: ./definitions/transfer_limit.yaml
77   vendor:
78     $ref: ./definitions/vendor.yaml
79 paths:
80   /acquisitions/baskets/managers:
81     $ref: paths/acquisitions_baskets.yaml#/~1acquisitions~1baskets~1managers
82   /acquisitions/funds:
83     $ref: ./paths/acquisitions_funds.yaml#/~1acquisitions~1funds
84   /acquisitions/funds/owners:
85     $ref: paths/acquisitions_funds.yaml#/~1acquisitions~1funds~1owners
86   /acquisitions/funds/users:
87     $ref: paths/acquisitions_funds.yaml#/~1acquisitions~1funds~1users
88   /acquisitions/orders:
89     $ref: ./paths/acquisitions_orders.yaml#/~1acquisitions~1orders
90   "/acquisitions/orders/{order_id}":
91     $ref: "./paths/acquisitions_orders.yaml#/~1acquisitions~1orders~1{order_id}"
92   /acquisitions/vendors:
93     $ref: ./paths/acquisitions_vendors.yaml#/~1acquisitions~1vendors
94   "/acquisitions/vendors/{vendor_id}":
95     $ref: "./paths/acquisitions_vendors.yaml#/~1acquisitions~1vendors~1{vendor_id}"
96   /advanced_editor/macros:
97     $ref: ./paths/advancededitormacros.yaml#/~1advanced_editor~1macros
98   /advanced_editor/macros/shared:
99     $ref: ./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1shared
100   "/advanced_editor/macros/shared/{advancededitormacro_id}":
101     $ref: "./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1shared~1{advancededitormacro_id}"
102   "/advanced_editor/macros/{advancededitormacro_id}":
103     $ref: "./paths/advancededitormacros.yaml#/~1advanced_editor~1macros~1{advancededitormacro_id}"
104   "/article_requests/{article_request_id}":
105     $ref: "./paths/article_requests.yaml#/~1article_requests~1{article_request_id}"
106   /auth/otp/token_delivery:
107     $ref: paths/auth.yaml#/~1auth~1otp~1token_delivery
108   /background_jobs:
109     $ref: ./paths/background_jobs.yaml#/~1background_jobs
110   "/background_jobs/{background_job_id}":
111     $ref: "./paths/background_jobs.yaml#/~1background_jobs~1{background_job_id}"
112   "/biblios/{biblio_id}":
113     $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}"
114   "/biblios/{biblio_id}/checkouts":
115     $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1checkouts"
116   "/biblios/{biblio_id}/items":
117     $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1items"
118   "/biblios/{biblio_id}/pickup_locations":
119     $ref: "./paths/biblios.yaml#/~1biblios~1{biblio_id}~1pickup_locations"
120   "/biblios/{biblio_id}/item_groups":
121     $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups"
122   "/biblios/{biblio_id}/item_groups/{item_group_id}":
123     $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups~1{item_group_id}"
124   "/biblios/{biblio_id}/item_groups/{item_group_id}/items":
125     $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups~1{item_group_id}~1items"
126   "/biblios/{biblio_id}/item_groups/{item_group_id}/items/{item_id}":
127     $ref: "./paths/biblios_item_groups.yaml#/~1biblios~1{biblio_id}~1item_groups~1{item_group_id}~1items~1{item_id}"
128   "/cash_registers/{cash_register_id}/cashups":
129     $ref: "./paths/cash_registers.yaml#/~1cash_registers~1{cash_register_id}~1cashups"
130   "/cashups/{cashup_id}":
131     $ref: "./paths/cash_registers.yaml#/~1cashups~1{cashup_id}"
132   /checkouts:
133     $ref: ./paths/checkouts.yaml#/~1checkouts
134   "/checkouts/{checkout_id}":
135     $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}"
136   "/checkouts/{checkout_id}/allows_renewal":
137     $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1allows_renewal"
138   "/checkouts/{checkout_id}/renewals":
139     $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1renewals"
140   "/checkouts/{checkout_id}/renewal":
141     $ref: "./paths/checkouts.yaml#/~1checkouts~1{checkout_id}~1renewal"
142   /circulation-rules/kinds:
143     $ref: ./paths/circulation-rules.yaml#/~1circulation-rules~1kinds
144   /cities:
145     $ref: ./paths/cities.yaml#/~1cities
146   "/cities/{city_id}":
147     $ref: "./paths/cities.yaml#/~1cities~1{city_id}"
148   "/clubs/{club_id}/holds":
149     $ref: "./paths/clubs.yaml#/~1clubs~1{club_id}~1holds"
150   /config/smtp_servers:
151     $ref: ./paths/config_smtp_servers.yaml#/~1config~1smtp_servers
152   "/config/smtp_servers/{smtp_server_id}":
153     $ref: "./paths/config_smtp_servers.yaml#/~1config~1smtp_servers~1{smtp_server_id}"
154   /holds:
155     $ref: ./paths/holds.yaml#/~1holds
156   "/holds/{hold_id}":
157     $ref: "./paths/holds.yaml#/~1holds~1{hold_id}"
158   "/holds/{hold_id}/pickup_location":
159     $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1pickup_location"
160   "/holds/{hold_id}/pickup_locations":
161     $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1pickup_locations"
162   "/holds/{hold_id}/priority":
163     $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1priority"
164   "/holds/{hold_id}/suspension":
165     $ref: "./paths/holds.yaml#/~1holds~1{hold_id}~1suspension"
166   /ill_backends:
167     $ref: ./paths/ill_backends.yaml#/~1ill_backends
168   "/ill_backends/{ill_backend_id}":
169     $ref: "./paths/ill_backends.yaml#/~1ill_backends~1{ill_backend_id}"
170   /illrequests:
171     $ref: ./paths/illrequests.yaml#/~1illrequests
172   "/import_batches/{import_batch_id}/records/{import_record_id}/matches/chosen":
173     $ref: "./paths/import_batches.yaml#/~1import_batches~1{import_batch_id}~1records~1{import_record_id}~1matches~1chosen"
174   /import_batch_profiles:
175     $ref: ./paths/import_batch_profiles.yaml#/~1import_batch_profiles
176   "/import_batch_profiles/{import_batch_profile_id}":
177     $ref: "./paths/import_batch_profiles.yaml#/~1import_batch_profiles~1{import_batch_profile_id}"
178   /items:
179     $ref: ./paths/items.yaml#/~1items
180   "/items/{item_id}":
181     $ref: "./paths/items.yaml#/~1items~1{item_id}"
182   "/items/{item_id}/bundled_items":
183     $ref: ./paths/items.yaml#/~1items~1{item_id}~1bundled_items
184   "/items/{item_id}/bundled_items/{bundled_item_id}":
185     $ref: ./paths/items.yaml#/~1items~1{item_id}~1bundled_items~1{bundled_item_id}
186   "/items/{item_id}/pickup_locations":
187     $ref: "./paths/items.yaml#/~1items~1{item_id}~1pickup_locations"
188   /libraries:
189     $ref: ./paths/libraries.yaml#/~1libraries
190   "/libraries/{library_id}":
191     $ref: "./paths/libraries.yaml#/~1libraries~1{library_id}"
192   /oauth/token:
193     $ref: ./paths/oauth.yaml#/~1oauth~1token
194   /patrons:
195     $ref: ./paths/patrons.yaml#/~1patrons
196   "/patrons/{patron_id}":
197     $ref: "./paths/patrons.yaml#/~1patrons~1{patron_id}"
198   "/patrons/{patron_id}/account":
199     $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account"
200   "/patrons/{patron_id}/account/credits":
201     $ref: "./paths/patrons_account.yaml#/~1patrons~1{patron_id}~1account~1credits"
202   "/patrons/{patron_id}/extended_attributes":
203     $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes"
204   "/patrons/{patron_id}/extended_attributes/{extended_attribute_id}":
205     $ref: "./paths/patrons_extended_attributes.yaml#/~1patrons~1{patron_id}~1extended_attributes~1{extended_attribute_id}"
206   "/patrons/{patron_id}/holds":
207     $ref: "./paths/patrons_holds.yaml#/~1patrons~1{patron_id}~1holds"
208   "/patrons/{patron_id}/password":
209     $ref: "./paths/patrons_password.yaml#/~1patrons~1{patron_id}~1password"
210   "/patrons/{patron_id}/password/expiration_date":
211     $ref: "./paths/patrons_password.yaml#/~1patrons~1{patron_id}~1password~1expiration_date"
212   "/public/biblios/{biblio_id}":
213     $ref: "./paths/biblios.yaml#/~1public~1biblios~1{biblio_id}"
214   "/public/biblios/{biblio_id}/items":
215     $ref: "./paths/biblios.yaml#/~1public~1biblios~1{biblio_id}~1items"
216   "/public/biblios/{biblio_id}/ratings":
217     $ref: "./paths/biblios.yaml#/~1public~1biblios~1{biblio_id}~1ratings"
218   /public/libraries:
219     $ref: ./paths/libraries.yaml#/~1public~1libraries
220   "/public/libraries/{library_id}":
221     $ref: "./paths/libraries.yaml#/~1public~1libraries~1{library_id}"
222   "/public/patrons/{patron_id}/article_requests/{article_request_id}":
223     $ref: "./paths/article_requests.yaml#/~1public~1patrons~1{patron_id}~1article_requests~1{article_request_id}"
224   "/public/patrons/{patron_id}/guarantors/can_see_charges":
225     $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1guarantors~1can_see_charges"
226   "/public/patrons/{patron_id}/guarantors/can_see_checkouts":
227     $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1guarantors~1can_see_checkouts"
228   "/public/patrons/{patron_id}/password":
229     $ref: "./paths/public_patrons.yaml#/~1public~1patrons~1{patron_id}~1password"
230   /quotes:
231     $ref: ./paths/quotes.yaml#/~1quotes
232   "/quotes/{quote_id}":
233     $ref: "./paths/quotes.yaml#/~1quotes~1{quote_id}"
234   /return_claims:
235     $ref: ./paths/return_claims.yaml#/~1return_claims
236   "/return_claims/{claim_id}":
237     $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}"
238   "/return_claims/{claim_id}/notes":
239     $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}~1notes"
240   "/return_claims/{claim_id}/resolve":
241     $ref: "./paths/return_claims.yaml#/~1return_claims~1{claim_id}~1resolve"
242   "/rotas/{rota_id}/stages/{stage_id}/position":
243     $ref: "./paths/rotas.yaml#/~1rotas~1{rota_id}~1stages~1{stage_id}~1position"
244   /suggestions:
245     $ref: ./paths/suggestions.yaml#/~1suggestions
246   "/suggestions/{suggestion_id}":
247     $ref: "./paths/suggestions.yaml#/~1suggestions~1{suggestion_id}"
248   /suggestions/managers:
249     $ref: paths/suggestions.yaml#/~1suggestions~1managers
250   /transfer_limits:
251     $ref: ./paths/transfer_limits.yaml#/~1transfer_limits
252   /transfer_limits/batch:
253     $ref: ./paths/transfer_limits.yaml#/~1transfer_limits~1batch
254   "/transfer_limits/{limit_id}":
255     $ref: "./paths/transfer_limits.yaml#/~1transfer_limits~1{limit_id}"
256 parameters:
257   advancededitormacro_id_pp:
258     description: Advanced editor macro internal identifier
259     in: path
260     name: advancededitormacro_id
261     required: true
262     type: integer
263   background_job_id_pp:
264     description: Job internal identifier
265     in: path
266     name: background_job_id
267     required: true
268     type: integer
269   biblio_id_pp:
270     description: Record internal identifier
271     in: path
272     name: biblio_id
273     required: true
274     type: integer
275   candidate_match_id_pp:
276     description: Internal import record match identifier
277     in: path
278     name: candidate_match_id
279     required: true
280     type: integer
281   cash_register_id_pp:
282     description: Cash register internal identifier
283     in: path
284     name: cash_register_id
285     required: true
286     type: integer
287   cashup_id_pp:
288     description: Cashup internal identifier
289     in: path
290     name: cashup_id
291     required: true
292     type: integer
293   checkout_id_pp:
294     description: Internal checkout identifier
295     in: path
296     name: checkout_id
297     required: true
298     type: integer
299   city_id_pp:
300     description: City internal identifier
301     in: path
302     name: city_id
303     required: true
304     type: integer
305   club_id_pp:
306     description: Internal club identifier
307     in: path
308     name: club_id
309     required: true
310     type: integer
311   fund_id_pp:
312     description: Fund id
313     in: path
314     name: fund_id
315     required: true
316     type: integer
317   hold_id_pp:
318     description: Internal hold identifier
319     in: path
320     name: hold_id
321     required: true
322     type: integer
323   import_batch_profile_id_pp:
324     description: Internal profile identifier
325     in: path
326     name: import_batch_profile_id
327     required: true
328     type: integer
329   import_record_id_pp:
330     description: Internal import record identifier
331     in: path
332     name: import_record_id
333     required: true
334     type: integer
335   item_id_pp:
336     description: Internal item identifier
337     in: path
338     name: item_id
339     required: true
340     type: integer
341   library_id_pp:
342     description: Internal library identifier
343     in: path
344     name: library_id
345     required: true
346     type: string
347   match:
348     description: Matching criteria
349     enum:
350       - contains
351       - exact
352       - starts_with
353       - ends_with
354     in: query
355     name: _match
356     required: false
357     type: string
358   order_by:
359     collectionFormat: csv
360     description: Sorting criteria
361     in: query
362     items:
363       type: string
364     name: _order_by
365     required: false
366     type: array
367   order_id_pp:
368     description: Internal order identifier
369     in: path
370     name: order_id
371     required: true
372     type: integer
373   page:
374     description: "Page number, for paginated object listing"
375     in: query
376     name: _page
377     required: false
378     type: integer
379   patron_id_pp:
380     description: Internal patron identifier
381     in: path
382     name: patron_id
383     required: true
384     type: integer
385   patron_id_qp:
386     description: Internal patron identifier
387     in: query
388     name: patron_id
389     type: integer
390   per_page:
391     description: "Page size, for paginated object listing"
392     in: query
393     name: _per_page
394     required: false
395     type: integer
396   q_body:
397     description: Query filter sent through request"s body
398     in: body
399     name: query
400     required: false
401     schema:
402       type: object
403   q_header:
404     description: Query filter sent as a request header
405     in: header
406     name: x-koha-query
407     required: false
408     type: string
409   q_param:
410     description: Query filter sent as a request parameter
411     in: query
412     name: q
413     required: false
414     type: array
415     items:
416       type: string
417     collectionFormat: multi
418   quote_id_pp:
419     description: Quote internal identifier
420     in: path
421     name: quote_id
422     required: true
423     type: integer
424   request_id_header:
425     description: Request id header
426     in: header
427     name: x-koha-request-id
428     required: false
429     type: integer
430   seen_pp:
431     description: Item was seen flag
432     in: query
433     name: seen
434     required: false
435     type: integer
436   smtp_server_id_pp:
437     description: SMTP server internal identifier
438     in: path
439     name: smtp_server_id
440     required: true
441     type: integer
442   suggestion_id_pp:
443     description: Internal suggestion identifier
444     in: path
445     name: suggestion_id
446     required: true
447     type: integer
448   transfer_limit_id_pp:
449     description: Internal transfer limit identifier
450     in: path
451     name: limit_id
452     required: true
453     type: string
454   vendor_id_pp:
455     description: Vendor id
456     in: path
457     name: vendor_id
458     required: true
459     type: integer
460 info:
461   title: Koha REST API
462   version: "1"
463   license:
464     name: "GPL v3,"
465     url: http://www.gnu.org/licenses/gpl.txt
466   contact:
467     name: Koha Development Team
468     url: https://koha-community.org/
469   description: |
470     ## Introduction
471
472     This API is documented in **OpenAPI format**.
473
474     ## Authentication
475
476     The API supports the following authentication mechanisms
477
478     * HTTP Basic authentication
479     * OAuth2 (client credentials grant)
480     * Cookie-based
481
482     Both _Basic authentication_ and the _OAuth2_ flow, need to be enabled
483     by system preferences.
484
485     ## Errors
486
487     The API uses standard HTTP status codes to indicate the success or failure
488     of the API call. The body of the response will be JSON in the following format:
489
490     ```
491     {
492       "error": "Current settings prevent the passed due date to be applied",
493       "error_code": "invalid_due_date"
494     }
495     ```
496
497     Note: Some routes might offer additional attributes in their error responses but that"s
498     subject to change and thus not documented.
499
500     ## Filtering responses
501
502     The API allows for some advanced response filtering using a JSON based query syntax. The
503     query can be added to the requests:
504
505     * as a query parameter `q=`
506     * in the request body
507     * in a special header `x-koha-query`
508
509     For simple field equality matches we can use `{ "fieldname": "value" }` where the fieldname
510     matches one of the fields as described in the particular endpoints response object.
511
512     We can refine that with more complex matching clauses by nesting a the clause into the
513     object; `{ "fieldname": { "clause": "value" } }`.
514
515     Available matching clauses include ">", "<", ">=", "<=", "-like", and "-not_like".
516
517     We can filter on multiple fields by adding them to the JSON respresentation. Adding at `HASH`
518     level will result in an "AND" query, whilst combinding them in an `ARRAY` wilth result in an
519     "OR" query: `{ "field1": "value2", "field2": "value2" }` will filter the response to only those
520     results with both field1 containing value2 AND field2 containing value2 for example.
521
522     Additionally, if you are requesting related data be embedded into the response one can query
523     on the related data using dot notation in the field names.
524
525     ### Examples
526
527     The following request would return any patron with firstname "Henry" and lastname "Acevedo";
528
529     `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": "Acevedo", "firstname": "Henry" }"`
530
531     The following request would return any patron whose lastname begins with "Ace";
532
533     `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": { "-like": "Ace%" }"`
534
535     The following request would return any patron whose lastname is "Acevedo" OR "Bernardo"
536
537     `curl -u koha:koha --request GET "http://127.0.0.1:8081/api/v1/patrons/" --data-raw "{ "surname": [ "Acevedo", "Bernardo" ] }"`
538
539     The following request embeds the related patron extended attributes data and filters on it.
540
541     `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" }'`
542
543     ## Special headers
544
545     ### x-koha-embed
546
547     This optional header allows the api consumer to request additional related data
548     to be returned in the api response.  It also allows for cross referencing in the
549     queries as described above. It accepts a comma delimited list of relation names.
550
551     Relations may on occasion also support dot delimited nesting to allow traversal.
552
553     ### x-koha-library
554
555     This optional header should be passed to give your api request a library
556     context; If it is not included in the request, then the request context
557     will default to using your api comsumer"s assigned home library.
558 tags:
559   - description: "Handle two factor authentication flows\n"
560     name: 2fa
561     x-displayName: Two factor authentication
562   - description: "Manage article requests\n"
563     name: article_requests
564     x-displayName: Article requests
565   - description: "Manage baskets for the acquisitions module\n"
566     name: baskets
567     x-displayName: Baskets
568   - description: "Manage bibliographic records\n"
569     name: biblios
570     x-displayName: Biblios
571   - description: "Manage cash register cashups\n"
572     name: cashups
573     x-displayName: Cashups
574   - description: "Manage checkouts\n"
575     name: checkouts
576     x-displayName: Checkouts
577   - description: "Manage circulation rules\n"
578     name: circulation_rules
579     x-displayName: Circulation rules
580   - description: "Manage cities\n"
581     name: cities
582     x-displayName: Cities
583   - description: "Manage patron clubs\n"
584     name: clubs
585     x-displayName: Clubs
586   - description: "Manage funds for the acquisitions module\n"
587     name: funds
588     x-displayName: Funds
589   - description: "Manage holds\n"
590     name: holds
591     x-displayName: Holds
592   - description: "Manage ILL module backends\n"
593     name: illbackends
594     x-displayName: ILL backends
595   - description: "Manage ILL requests\n"
596     name: illrequests
597     x-displayName: ILL requests
598   - description: "Manage import batches\n"
599     name: import_batches
600     x-display-name: Import batches
601   - description: "Manage item groups\n"
602     name: item_groups
603     x-displayName: Item groups
604   - description: "Manage items\n"
605     name: items
606     x-displayName: Items
607   - description: "Manage libraries\n"
608     name: libraries
609     x-displayName: Libraries
610   - description: "Manage macros\n"
611     name: macros
612     x-displayName: Macros
613   - description: "Manage acquisition orders\n"
614     name: orders
615     x-displayName: Orders
616   - description: "Handle OAuth flows\n"
617     name: oauth
618     x-displayName: OAuth
619   - description: "Manage patrons\n"
620     name: patrons
621     x-displayName: Patrons
622   - description: "Manage quotes\n"
623     name: quotes
624     x-displayName: Quotes
625   - description: "Manage return claims\n"
626     name: return_claims
627     x-displayName: Return claims
628   - description: "Manage rotas\n"
629     name: rotas
630     x-displayName: Rotas
631   - description: "Manage SMTP servers configurations\n"
632     name: smtp_servers
633     x-displayName: SMTP servers
634   - description: "Manage transfer limits\n"
635     name: transfer
636     x-displayName: Transfer limits
637   - description: "Manage purchase suggestions\n"
638     name: suggestions
639     x-displayName: Purchase suggestions
640   - description: "Manage vendors for the acquisitions module\n"
641     name: vendors
642     x-displayName: Vendors
643   - description: "Manage batch import profiles\n"
644     name: batch_import_profiles
645     x-displayName: Batch import profiles