@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 +20 -201
- package/dist/audit.yml +82 -19
- package/dist/fileserver.yml +59 -8
- package/dist/guardrail.yml +22 -18
- package/dist/import.yml +15 -25
- package/dist/networkpolicy.yml +4 -0
- package/dist/tool.yml +15 -25
- package/package.json +1 -1
- package/schemas.json +1317 -1328
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:
|
|
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:
|
|
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
|
-
|
|
5960
|
-
|
|
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
|
|
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.
|
package/dist/fileserver.yml
CHANGED
|
@@ -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:
|
|
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:
|
|
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:
|
|
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:
|