@celigo/api-specs 0.2.170 → 0.2.171

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ai-agent.yml CHANGED
@@ -1232,7 +1232,7 @@ components:
1232
1232
  x-enumDescriptions:
1233
1233
  text: Free-form text response from the model.
1234
1234
  json_schema: Structured JSON output conforming to a defined schema.
1235
- blob: Binary data output for non-text content.
1235
+ blob: Image generation — the run calls the image generation tool and returns the stored image's `blobKey`, not `_text` or `_json`.
1236
1236
  default: text
1237
1237
  description: Output format type.
1238
1238
  schemaMode:
@@ -1454,11 +1454,6 @@ components:
1454
1454
  an object without a non-empty name fails with a
1455
1455
  missing-required-field error. String entries are the
1456
1456
  legacy form and stay valid.
1457
- allowedPrompts:
1458
- type: array
1459
- description: Specific prompts to allow from the MCP server (used for MCP prompt entries; all if omitted).
1460
- items:
1461
- type: string
1462
1457
  tool:
1463
1458
  type: object
1464
1459
  description: |
@@ -1601,7 +1596,7 @@ components:
1601
1596
  x-enumDescriptions:
1602
1597
  text: Free-form text response from the model.
1603
1598
  json_schema: Structured JSON output conforming to a defined schema.
1604
- blob: Binary data output for non-text content.
1599
+ blob: Image generation — the run returns the stored image's `blobKey`, not `_text` or `_json`.
1605
1600
  default: text
1606
1601
  schemaMode:
1607
1602
  type: string
@@ -1770,11 +1765,6 @@ components:
1770
1765
  description: Display description shown for the tool.
1771
1766
  required:
1772
1767
  - name
1773
- allowedPrompts:
1774
- type: array
1775
- description: Specific prompts to allow from the MCP server (used for MCP prompt entries; all if omitted).
1776
- items:
1777
- type: string
1778
1768
  tool:
1779
1769
  type: object
1780
1770
  description: Reference to a Celigo Tool resource, used when type is "tool".
@@ -4398,192 +4388,6 @@ components:
4398
4388
  - lookupName
4399
4389
  - required:
4400
4390
  - hardCodedValue
4401
- ResponseMapping:
4402
- type: object
4403
- description: |
4404
- Merges fields from a step's response back onto the in-flight record so
4405
- downstream steps can read them. Applies to both lookup steps
4406
- (`type: "export"`) and import steps (`type: "import"`); without it, the
4407
- step's response is discarded after the call.
4408
-
4409
- `fields` and `lists` are plain arrays — exactly the shape GET returns.
4410
-
4411
- Extract paths do NOT read the raw application response — the platform
4412
- wraps every response in a canonical per-record envelope first, and
4413
- extracts evaluate against that envelope:
4414
-
4415
- - **Lookup steps**: `{"statusCode": 200, "data": [<result records>],
4416
- "errors": []}` — `data` holds the records the lookup step returns,
4417
- AFTER the export's own `transform` and output `filter` have run, so
4418
- extracts must start from it and name transformed fields by their
4419
- transformed name: `data[0].name` copies a field of the first result,
4420
- `data` copies the whole result array. A bare result-record field name
4421
- (e.g. `name`) resolves to nothing and merges nothing, and so does the
4422
- raw response path a transform consumed. A lookup that groups its
4423
- results returns each group as an array inside `data`
4424
- (`"data": [[<row>, <row>]]`): `data[0][0].name` (or `data.0.0.name`)
4425
- reads the first row of the first group, and `data[0]` copies the group.
4426
- - **Import steps**: `{"id": "<destination record id>", "statusCode": 200,
4427
- "ignored": false, "errors": [], "_json": <raw destination response>,
4428
- ...<response body fields flattened at the root>}` — use `id` for the
4429
- destination-assigned id and `_json.<path>` (or the flattened
4430
- `<path>`) for fields inside the destination's response body. The full
4431
- envelope (including `id`) is present on real runs and in flow-builder
4432
- previews; flow TEST runs never execute imports, and their envelope is
4433
- built from the import's saved `mockResponse`, or from the placeholder
4434
- `{"id": "1234567890", "mockResponse": "replace me"}` (numbered
4435
- `1234567890-1`, `1234567890-2`, … when a page holds several records)
4436
- — an `extract: "id"` in a test run merges that mock id, never a
4437
- destination record id.
4438
-
4439
- An `extract` may also be a Handlebars expression. It evaluates against
4440
- the same envelope as a plain path, so every path inside `{{ }}` starts
4441
- where the plain paths start — `{{data.0.name}}`,
4442
- `{{#compare data.0.count "==" 1}}yes{{else}}no{{/compare}}`,
4443
- `{{#if data.length}}found{{/if}}` on a lookup; `{{_json.order.id}}` or
4444
- `{{id}}` on an import. Index arrays with dots inside Handlebars
4445
- (`data.0.name` or `data.[0].name`; `data[0].name` renders nothing), and
4446
- expect a string result (`"1"`, `"false"`). There is no `record` object in
4447
- this context: `{{record.<anything>}}` renders nothing. Prefer a plain
4448
- path when the value is simply copied.
4449
- x-celigo-ai-guidance:
4450
- - |-
4451
- Handlebars is allowed in `extract` but only rooted at the envelope —
4452
- `{{data.0.x}}` on a lookup, `{{_json.x}}` / `{{id}}` on an import. The
4453
- `record.` root belongs to import-mapping templates; here every
4454
- `{{record.…}}` form renders nothing, silently, and `{{data[0].x}}`
4455
- (bracket index inside Handlebars) renders nothing too. Use Handlebars
4456
- only for a derived value (a flag, a concatenation); copy values with a
4457
- plain path.
4458
- - |-
4459
- A lookup's `data[]` is the step's output after its `transform` and
4460
- `filter`, so author extracts against the transformed records — never
4461
- against the raw response the transform consumed, and never against a
4462
- saved `mockOutput` as stored (it is the raw response; the transform
4463
- runs on top of it in a test run).
4464
- - |-
4465
- Send `fields` and `lists` as bare arrays, exactly as GET returns them.
4466
- Never wrap either in an object (e.g. `"fields": {"type": [...]}`): the
4467
- API does not reject that shape — it returns 200 and silently persists
4468
- `fields: [null]` / `lists: [{"fields": []}]`, erasing the step's
4469
- response mappings.
4470
- - |-
4471
- responseMapping is fully replaced on PUT: omitting it resets the step
4472
- to empty `{"fields": [], "lists": []}`. Always send the complete
4473
- intended mapping for every step.
4474
- - |-
4475
- To carry several lookup results onto the record, use `extract: "data"`
4476
- (the whole result array) or a `lists` entry whose extracts use
4477
- `data[*].x` — never `data[*].x` in `fields[].extract`, which merges
4478
- nothing: the record simply never gains the field.
4479
- examples:
4480
- - fields:
4481
- - extract: id
4482
- generate: ContactId
4483
- lists: []
4484
- - fields:
4485
- - extract: data[0].customer.name
4486
- generate: customerName
4487
- lists:
4488
- - generate: matchedOrders
4489
- fields:
4490
- - extract: data[*].id
4491
- generate: orderId
4492
- - extract: data[*].total
4493
- generate: amount
4494
- properties:
4495
- fields:
4496
- type: array
4497
- description: |
4498
- Field mappings that copy individual values from the response
4499
- envelope onto the in-flight record.
4500
- items:
4501
- type: object
4502
- properties:
4503
- extract:
4504
- type: string
4505
- x-celigo-agent:
4506
- - handlebars
4507
- description: |
4508
- Path within the canonical response envelope to copy the value
4509
- from, or a Handlebars expression over that same envelope. For
4510
- lookup steps, paths start from the envelope's `data` array
4511
- (`data[0].x` and `data.0.x` are equivalent; `data` alone
4512
- copies every result) — a lookup result field written without
4513
- the `data` prefix resolves to nothing. For import steps, use
4514
- the envelope fields `id`, `statusCode`, `ignored`, `_json.<path>`
4515
- for the raw response body, or the body field itself at the
4516
- envelope root (`orderNumber` and `_json.orderNumber` read the
4517
- same value). A `[*]` wildcard is not honored here — `data[*].x`
4518
- merges nothing; iterate arrays with `lists` instead. Inside
4519
- Handlebars, index with dots (`{{data.0.x}}`, never
4520
- `{{data[0].x}}`) and never use a `record.` root.
4521
- examples:
4522
- - data[0].customer.name
4523
- - data.0.fields.Product Name
4524
- - data
4525
- - id
4526
- - _json.orderNumber
4527
- - '{{#if data.length}}found{{else}}missing{{/if}}'
4528
- generate:
4529
- type: string
4530
- description: |
4531
- Field path on the in-flight record where the extracted value
4532
- is stored, using dot notation for nesting. Downstream steps
4533
- read the value at this path.
4534
- examples:
4535
- - customerName
4536
- - supplierDetails.supplierName
4537
- - netsuite_order_id
4538
- lists:
4539
- type: array
4540
- description: |
4541
- Array mappings that build a target array on the in-flight record
4542
- from an array inside the response envelope — one output item per
4543
- element of the array the item extracts mark with `[*]` (`data[*].x`
4544
- for lookups, `_json.<arrayPath>[*].x` for imports); an empty source
4545
- array yields an empty target array. Not needed for one-to-many
4546
- (fan-out) merge-back, which uses plain field mappings.
4547
- items:
4548
- type: object
4549
- properties:
4550
- generate:
4551
- type: string
4552
- description: |
4553
- Array field created on the in-flight record to hold the
4554
- mapped items.
4555
- examples:
4556
- - orderItems
4557
- - addresses
4558
- - contacts
4559
- fields:
4560
- type: array
4561
- description: |
4562
- Field mappings applied to each item of the source array to
4563
- produce the corresponding target-array item.
4564
- items:
4565
- type: object
4566
- properties:
4567
- extract:
4568
- type: string
4569
- description: |
4570
- Full envelope path to the source value, with `[*]`
4571
- marking the array to iterate — `data[*].productId` for a
4572
- lookup, `_json.items[*].sku` for an import. A path without
4573
- `[*]` (e.g. `statusCode`) repeats the same envelope value
4574
- on every item; an item-relative name (`productId`)
4575
- resolves to nothing and produces empty objects.
4576
- examples:
4577
- - data[*].productId
4578
- - data[*].quantity
4579
- - _json.items[*].sku
4580
- generate:
4581
- type: string
4582
- description: Target field within each mapped array item.
4583
- examples:
4584
- - itemId
4585
- - qty
4586
- - unitPrice
4587
4391
  Filter:
4588
4392
  type: object
4589
4393
  description: |
@@ -5956,8 +5760,14 @@ components:
5956
5760
  mappings:
5957
5761
  allOf:
5958
5762
  - $ref: '#/components/schemas/Mappings'
5959
- responseMapping:
5960
- $ref: '#/components/schemas/ResponseMapping'
5763
+ x-celigo-ai-guidance:
5764
+ - |-
5765
+ The mapped record is the agent's input: its `text` is sent as text, `record` as
5766
+ its JSON, and `files` (`[{name, blobKey}]`, blob keys from earlier in the same
5767
+ flow) as attachments. `conversationHistoryId` (at most 200
5768
+ characters) keeps one conversation per agent and id across runs. A record with
5769
+ none of `text`, `record` or `files` is sent whole, as JSON, so with no mappings a
5770
+ record's own top-level `text`, `record` or `files` field is its only input.
5961
5771
  inputContext:
5962
5772
  type: string
5963
5773
  enum:
@@ -5968,7 +5778,9 @@ components:
5968
5778
  envelope: The agent receives records wrapped in an envelope with metadata.
5969
5779
  description: |-
5970
5780
  Selects the data context that `mappings[].extract` evaluates against. With no
5971
- mappings the agent receives the entire record and `inputContext` is moot. `record`
5781
+ mappings the agent receives the entire record as JSON (or only the record's own
5782
+ top-level `text`, `record` or `files` fields, when it has any) and `inputContext`
5783
+ is moot. `record`
5972
5784
  (the default) extracts against the flat record; `envelope` extracts against the
5973
5785
  runtime envelope, which exposes the record alongside job, settings, and other
5974
5786
  run-time metadata (`$.record.field`, `$.settings.field`, etc.). Same contract as
@@ -6068,6 +5880,13 @@ components:
6068
5880
  _headers:
6069
5881
  type: object
6070
5882
  description: Mock response headers.
5883
+ blobKey:
5884
+ type: string
5885
+ description: |-
5886
+ Mock output of an agent with `blob` output (image generation:
5887
+ `openai.output.format.type` or `litellm.responseFormat.type` set to `blob`),
5888
+ which returns the stored image's key here. Unrelated to the import-level `blob`
5889
+ flag, which agents refuse.
6071
5890
  ResourceResponse:
6072
5891
  type: object
6073
5892
  description: Response
package/dist/audit.yml CHANGED
@@ -49,6 +49,12 @@ paths:
49
49
  exact resource only — to include descendants (e.g. an integration's
50
50
  flows and exports), use `GET /v1/{resourceType}/{_id}/audit` instead.
51
51
  `_resourceId` requires `resourceType` to also be set.
52
+
53
+ Only the account owner and administrators can query the account-wide
54
+ log: manage, monitor and integration-level users get 403, and an API
55
+ token with limited scope gets 401 `token_restricted_access`. Those
56
+ users can still read the history of a resource they can see, through
57
+ `GET /v1/{resourceType}/{_id}/audit`.
52
58
  parameters:
53
59
  - name: limit
54
60
  in: query
@@ -311,7 +317,9 @@ paths:
311
317
  '400':
312
318
  $ref: '#/components/responses/400-bad-request'
313
319
  '401':
314
- $ref: '#/components/responses/401-unauthorized'
320
+ $ref: '#/components/responses/401-unauthorized-or-scoped-token'
321
+ '403':
322
+ $ref: '#/components/responses/403-administrator-only'
315
323
  '422':
316
324
  $ref: '#/components/responses/422-unprocessable-entity'
317
325
  post:
@@ -328,7 +336,8 @@ paths:
328
336
  identical to `GET /v1/audit`.
329
337
 
330
338
  Pagination, sorting, and time bounds stay in the query string — sending
331
- them in the body fails with 400 `invalid_request_body`.
339
+ them in the body fails with 400 `invalid_request_body`. The same callers
340
+ are refused as on `GET /v1/audit`.
332
341
  parameters:
333
342
  - name: limit
334
343
  in: query
@@ -472,7 +481,9 @@ paths:
472
481
  - code: invalid_request_body
473
482
  message: 'The request body should not contain pagination parameter(s): limit. Pagination values (after, before, limit, sort_order, sort_by) must be provided as query parameters. The request body should only contain filter fields.'
474
483
  '401':
475
- $ref: '#/components/responses/401-unauthorized'
484
+ $ref: '#/components/responses/401-unauthorized-or-scoped-token'
485
+ '403':
486
+ $ref: '#/components/responses/403-administrator-only'
476
487
  '422':
477
488
  description: |-
478
489
  A filter value is invalid, a filter that must be an array was sent as
@@ -502,7 +513,9 @@ paths:
502
513
  description: |-
503
514
  Generates a signed URL for downloading a CSV export of audit logs across all
504
515
  documents. The CSV columns are: Time, Source, User, Resource, Name/ID, Action,
505
- Field, Old value, New value, Support.
516
+ Field, Old value, New value, Support. The same callers are refused as on
517
+ `GET /v1/audit`: only the account owner and administrators can export the
518
+ account-wide log.
506
519
 
507
520
  The signed URL expires after 15 minutes. When `hasMore` is true, pass
508
521
  the last CSV row's timestamp as `to` to fetch the next batch.
@@ -686,7 +699,9 @@ paths:
686
699
  signedURL: https://integrator-userdata-delete-30.s3.us-east-1.amazonaws.com/audit/624cb034630.../audit-export.csv?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=900&...
687
700
  hasMore: false
688
701
  '401':
689
- $ref: '#/components/responses/401-unauthorized'
702
+ $ref: '#/components/responses/401-unauthorized-or-scoped-token'
703
+ '403':
704
+ $ref: '#/components/responses/403-administrator-only'
690
705
  '422':
691
706
  $ref: '#/components/responses/422-unprocessable-entity'
692
707
  post:
@@ -766,7 +781,9 @@ paths:
766
781
  schema:
767
782
  $ref: '#/components/schemas/Error'
768
783
  '401':
769
- $ref: '#/components/responses/401-unauthorized'
784
+ $ref: '#/components/responses/401-unauthorized-or-scoped-token'
785
+ '403':
786
+ $ref: '#/components/responses/403-administrator-only'
770
787
  '422':
771
788
  $ref: '#/components/responses/422-unprocessable-entity'
772
789
  /v1/{resourceType}/{_id}/audit:
@@ -1997,6 +2014,65 @@ components:
1997
2014
  errors:
1998
2015
  - code: invalid_request
1999
2016
  message: The request body failed validation.
2017
+ 401-unauthorized-or-scoped-token:
2018
+ description: |-
2019
+ Unauthorized: the request has no valid bearer token (a bare `{message}` body, as on every
2020
+ route), or the token is an API token with limited scope. The account-wide audit query
2021
+ takes only a full-access API token, a personal access token, or a signed-in session; a
2022
+ scoped token is refused with `token_restricted_access` in the standard `{errors: [...]}`
2023
+ envelope.
2024
+ content:
2025
+ application/json:
2026
+ schema:
2027
+ oneOf:
2028
+ - $ref: '#/components/schemas/Error'
2029
+ - type: object
2030
+ description: The auth middleware's bare body for a missing or invalid token.
2031
+ properties:
2032
+ message:
2033
+ type: string
2034
+ description: '`Unauthorized` (no Authorization header) or `Bearer Authentication Failed`.'
2035
+ required:
2036
+ - message
2037
+ examples:
2038
+ scopedToken:
2039
+ summary: An API token scoped to specific resources
2040
+ value:
2041
+ errors:
2042
+ - code: token_restricted_access
2043
+ message: This action is not allowed using API tokens with limited scope.
2044
+ invalidToken:
2045
+ summary: Bearer token invalid or revoked
2046
+ value:
2047
+ message: Bearer Authentication Failed
2048
+ 403-administrator-only:
2049
+ description: |-
2050
+ The caller is a manage, monitor or integration-level user. The account-wide audit log is
2051
+ for the account owner and administrators; other users read one resource's history with
2052
+ `GET /v1/{resourceType}/{_id}/audit` instead.
2053
+ content:
2054
+ application/json:
2055
+ schema:
2056
+ $ref: '#/components/schemas/Error'
2057
+ examples:
2058
+ notAdministrator:
2059
+ value:
2060
+ errors:
2061
+ - code: access_restricted
2062
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
2063
+ 422-unprocessable-entity:
2064
+ description: |
2065
+ Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.
2066
+ content:
2067
+ application/json:
2068
+ schema:
2069
+ $ref: '#/components/schemas/Error'
2070
+ examples:
2071
+ default:
2072
+ value:
2073
+ errors:
2074
+ - code: unprocessable_entity
2075
+ message: The request could not be processed due to a semantic error.
2000
2076
  401-unauthorized:
2001
2077
  description: |-
2002
2078
  Unauthorized. The request lacks a valid bearer token, or the provided token
@@ -2031,19 +2107,6 @@ components:
2031
2107
  summary: Bearer token invalid or revoked
2032
2108
  value:
2033
2109
  message: Bearer Authentication Failed
2034
- 422-unprocessable-entity:
2035
- description: |
2036
- Unprocessable entity. The request was well-formed but was unable to be followed due to semantic errors.
2037
- content:
2038
- application/json:
2039
- schema:
2040
- $ref: '#/components/schemas/Error'
2041
- examples:
2042
- default:
2043
- value:
2044
- errors:
2045
- - code: unprocessable_entity
2046
- message: The request could not be processed due to a semantic error.
2047
2110
  404-not-found:
2048
2111
  description: |
2049
2112
  Not found. The requested resource does not exist or is not visible to the caller.
@@ -9,7 +9,9 @@ info:
9
9
  (`GET`/`PUT /v1/mft/fileserver`) and the partner accounts that log in to it
10
10
  (`/v1/mft/fileserver/accounts`), each chrooted to a Celigo Storage folder. Requires a
11
11
  full-access API token — folder-path-scoped and other restricted tokens answer 403
12
- FILESERVER_FULL_ACCESS_TOKEN_REQUIRED on every route.
12
+ FILESERVER_FULL_ACCESS_TOKEN_REQUIRED on every route, and so does every personal access
13
+ token, whatever its creator's role. Only the account owner and administrators may manage
14
+ the server.
13
15
  servers:
14
16
  - url: https://api.integrator.io
15
17
  description: Production (US / default region)
@@ -24,7 +26,7 @@ security:
24
26
  tags:
25
27
  - name: File Server
26
28
  description: |-
27
- Each environment can run a Celigo-hosted SFTP file server. Enabling it claims a permanent `identifier` that becomes part of every partner login (`<username>@<identifier>`) and exposes the shared endpoint and host-key fingerprints partners need to connect. Partner accounts are created under the server, each with its own password and a Celigo Storage folder that becomes the account's root, so files a partner uploads appear in that folder and files placed there are what the partner can download. The account's license must include the file server add-on (`fileserver.enabled`), and every call needs a full-access API token.
29
+ Each environment can run a Celigo-hosted SFTP file server. Enabling it claims a permanent `identifier` that becomes part of every partner login (`<username>@<identifier>`) and exposes the shared endpoint and host-key fingerprints partners need to connect. Partner accounts are created under the server, each with its own password and a Celigo Storage folder that becomes the account's root, so files a partner uploads appear in that folder and files placed there are what the partner can download. The account's license must include the file server add-on (`fileserver.enabled`), and every call needs a full-access API token: scoped tokens and personal access tokens are refused, and so are manage, monitor and integration-level users.
28
30
 
29
31
  ## File server and account schemas
30
32
 
@@ -87,7 +89,11 @@ paths:
87
89
  '401':
88
90
  $ref: '#/components/responses/401-unauthorized'
89
91
  '403':
90
- description: The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`).
92
+ description: |-
93
+ The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`). A
94
+ personal access token is refused the same way as a scoped token, and a manage, monitor
95
+ or integration-level user gets `access_restricted`: only the owner and administrators
96
+ manage the file server.
91
97
  content:
92
98
  application/json:
93
99
  schema:
@@ -98,6 +104,12 @@ paths:
98
104
  errors:
99
105
  - code: FILESERVER_FULL_ACCESS_TOKEN_REQUIRED
100
106
  message: The file server management APIs require an API token with full access
107
+ notAdministrator:
108
+ summary: A manage, monitor or integration-level user
109
+ value:
110
+ errors:
111
+ - code: access_restricted
112
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
101
113
  '404':
102
114
  description: The environment is entitled but its server has never been enabled (`FILESERVER_NOT_FOUND`).
103
115
  content:
@@ -220,7 +232,7 @@ paths:
220
232
  description: |-
221
233
  The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`),
222
234
  the account's license lacks the file server add-on or the environment is a
223
- sandbox (`FILESERVER_NOT_ENTITLED`).
235
+ sandbox (`FILESERVER_NOT_ENTITLED`). A personal access token is refused the same way as a scoped token, and a manage, monitor or integration-level user gets `access_restricted`: only the owner and administrators manage the file server.
224
236
  content:
225
237
  application/json:
226
238
  schema:
@@ -231,6 +243,12 @@ paths:
231
243
  errors:
232
244
  - code: FILESERVER_NOT_ENTITLED
233
245
  message: The file server add-on is not enabled for this account
246
+ notAdministrator:
247
+ summary: A manage, monitor or integration-level user
248
+ value:
249
+ errors:
250
+ - code: access_restricted
251
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
234
252
  '404':
235
253
  description: A disable was sent for an environment whose server was never enabled (`FILESERVER_NOT_FOUND`).
236
254
  content:
@@ -396,7 +414,11 @@ paths:
396
414
  '401':
397
415
  $ref: '#/components/responses/401-unauthorized'
398
416
  '403':
399
- description: The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`), or the environment is a sandbox (`FILESERVER_NOT_ENTITLED`).
417
+ description: |-
418
+ The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`), or
419
+ the environment is a sandbox (`FILESERVER_NOT_ENTITLED`). A personal access token is
420
+ refused the same way as a scoped token, and a manage, monitor or integration-level user
421
+ gets `access_restricted`: only the owner and administrators manage the file server.
400
422
  content:
401
423
  application/json:
402
424
  schema:
@@ -407,6 +429,12 @@ paths:
407
429
  errors:
408
430
  - code: FILESERVER_FULL_ACCESS_TOKEN_REQUIRED
409
431
  message: The file server management APIs require an API token with full access
432
+ notAdministrator:
433
+ summary: A manage, monitor or integration-level user
434
+ value:
435
+ errors:
436
+ - code: access_restricted
437
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
410
438
  '422':
411
439
  description: The environment's server has never been enabled (`FILESERVER_NOT_ENABLED`); a disabled server is still manageable.
412
440
  content:
@@ -487,7 +515,7 @@ paths:
487
515
  The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`);
488
516
  the license lacks the add-on or the environment is a sandbox
489
517
  (`FILESERVER_NOT_ENTITLED`); or the environment already holds
490
- `limits.maxAccounts` enabled accounts (`FILESERVER_MAX_ACCOUNTS_EXCEEDED`).
518
+ `limits.maxAccounts` enabled accounts (`FILESERVER_MAX_ACCOUNTS_EXCEEDED`). A personal access token is refused the same way as a scoped token, and a manage, monitor or integration-level user gets `access_restricted`: only the owner and administrators manage the file server.
491
519
  content:
492
520
  application/json:
493
521
  schema:
@@ -498,6 +526,12 @@ paths:
498
526
  errors:
499
527
  - code: FILESERVER_MAX_ACCOUNTS_EXCEEDED
500
528
  message: The maximum number of enabled accounts for this environment has been reached
529
+ notAdministrator:
530
+ summary: A manage, monitor or integration-level user
531
+ value:
532
+ errors:
533
+ - code: access_restricted
534
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
501
535
  '409':
502
536
  description: Another account in this environment already has that username, enabled or not (`FILESERVER_USERNAME_TAKEN`).
503
537
  content:
@@ -688,7 +722,7 @@ paths:
688
722
  The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`);
689
723
  the license lacks the add-on or the environment is a sandbox
690
724
  (`FILESERVER_NOT_ENTITLED`); or re-enabling would exceed `limits.maxAccounts`
691
- (`FILESERVER_MAX_ACCOUNTS_EXCEEDED`).
725
+ (`FILESERVER_MAX_ACCOUNTS_EXCEEDED`). A personal access token is refused the same way as a scoped token, and a manage, monitor or integration-level user gets `access_restricted`: only the owner and administrators manage the file server.
692
726
  content:
693
727
  application/json:
694
728
  schema:
@@ -699,6 +733,12 @@ paths:
699
733
  errors:
700
734
  - code: FILESERVER_MAX_ACCOUNTS_EXCEEDED
701
735
  message: The maximum number of enabled accounts for this environment has been reached
736
+ notAdministrator:
737
+ summary: A manage, monitor or integration-level user
738
+ value:
739
+ errors:
740
+ - code: access_restricted
741
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
702
742
  '404':
703
743
  $ref: '#/components/responses/404-account-not-found'
704
744
  '409':
@@ -1407,7 +1447,12 @@ components:
1407
1447
  value:
1408
1448
  message: Bearer Authentication Failed
1409
1449
  403-full-access-required:
1410
- description: The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`), or the license lacks the add-on / the environment is a sandbox (`FILESERVER_NOT_ENTITLED`).
1450
+ description: |-
1451
+ The token is not a full-access API token (`FILESERVER_FULL_ACCESS_TOKEN_REQUIRED`) --
1452
+ a scoped API token, or any personal access token, which never counts as full access --
1453
+ or the license lacks the add-on / the environment is a sandbox (`FILESERVER_NOT_ENTITLED`).
1454
+ A manage, monitor or integration-level user is refused with `access_restricted`: only the
1455
+ account owner and administrators manage the file server.
1411
1456
  content:
1412
1457
  application/json:
1413
1458
  schema:
@@ -1418,6 +1463,12 @@ components:
1418
1463
  errors:
1419
1464
  - code: FILESERVER_FULL_ACCESS_TOKEN_REQUIRED
1420
1465
  message: The file server management APIs require an API token with full access
1466
+ notAdministrator:
1467
+ summary: A manage, monitor or integration-level user
1468
+ value:
1469
+ errors:
1470
+ - code: access_restricted
1471
+ message: The role which you are associated with doesn't have the required permissions to perform the action.
1421
1472
  404-account-not-found:
1422
1473
  description: No account with this id in the caller's environment, or the id is not a valid identifier (`FILESERVER_ACCOUNT_NOT_FOUND`).
1423
1474
  content: