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