@celigo/api-specs 0.2.92 → 0.2.94
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/account.yml +255 -52
- package/dist/api.yml +15 -3
- package/dist/connection.yml +31 -4
- package/dist/enduser.yml +15 -3
- package/dist/fileserver.yml +198 -57
- package/dist/filestorage.yml +277 -173
- package/dist/integration.yml +4 -3
- package/dist/mcp-server.yml +15 -3
- package/dist/sync.yml +55 -10
- package/dist/tool.yml +15 -3
- package/package.json +1 -1
- package/schemas.json +1 -1
package/dist/filestorage.yml
CHANGED
|
@@ -17,7 +17,7 @@ security:
|
|
|
17
17
|
tags:
|
|
18
18
|
- name: File Storage
|
|
19
19
|
description: |-
|
|
20
|
-
Celigo Storage is managed file storage built into integrator.io for staging files between flows and giving integrations persistent files to work with. Organize content into files and folders, transfer bytes directly through short-lived presigned S3 URLs, and reference stored files from flows. Items are addressed by `_id` and placed by parent folder; renames and moves keep the `_id` stable, and deletes go to a 30-day recycle bin before they can be purged.
|
|
20
|
+
Celigo Storage is managed file storage built into integrator.io for staging files between flows and giving integrations persistent files to work with. Organize content into files and folders, transfer bytes directly through short-lived presigned S3 URLs, and reference stored files from flows. Items are addressed by `_id` and placed by parent folder, where names are unique among live items; renames and moves keep the `_id` stable, and deletes go to a 30-day recycle bin before they can be purged.
|
|
21
21
|
|
|
22
22
|
## Storage item schema
|
|
23
23
|
|
|
@@ -35,10 +35,14 @@ paths:
|
|
|
35
35
|
to those URLs — a single PUT must carry the
|
|
36
36
|
`x-amz-server-side-encryption: AES256` header — then the item flips to
|
|
37
37
|
active once S3 confirms it; no further API call is needed. Each URL's
|
|
38
|
-
lifetime is in its `X-Amz-Expires` parameter;
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
while
|
|
38
|
+
lifetime is in its `X-Amz-Expires` parameter; once every part already
|
|
39
|
+
issued has been uploaded, a multipart upload fetches further part URLs by
|
|
40
|
+
posting again with the item's `_id`, `uploadId`, and `issuedPartsCount`,
|
|
41
|
+
while an expired single PUT URL cannot be reissued.
|
|
42
|
+
Each file is validated independently, so the response can mix per-file
|
|
43
|
+
successes and failures while the request itself returns 200 — a name
|
|
44
|
+
already held by a live item in the target folder fails that entry with
|
|
45
|
+
409 `STORAGE_ITEM_ALREADY_EXISTS`.
|
|
42
46
|
operationId: initiateStorageUpload
|
|
43
47
|
tags:
|
|
44
48
|
- File Storage
|
|
@@ -86,7 +90,7 @@ paths:
|
|
|
86
90
|
$ref: '#/components/schemas/InitiateUploadResponse'
|
|
87
91
|
examples:
|
|
88
92
|
mixed:
|
|
89
|
-
summary: Single success, multipart success, and
|
|
93
|
+
summary: Single success, multipart success, and two rejections
|
|
90
94
|
value:
|
|
91
95
|
files:
|
|
92
96
|
- _id: 683b2a0e1c3d5f001a9e8b01
|
|
@@ -112,70 +116,11 @@ paths:
|
|
|
112
116
|
errors:
|
|
113
117
|
- code: STORAGE_INVALID_MIME_TYPE
|
|
114
118
|
message: Invalid MIME type
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
$ref: '#/components/responses/403-forbidden'
|
|
121
|
-
'404':
|
|
122
|
-
$ref: '#/components/responses/404-not-found'
|
|
123
|
-
'422':
|
|
124
|
-
$ref: '#/components/responses/422-unprocessable-entity'
|
|
125
|
-
/v1/storage/files/refresh-urls:
|
|
126
|
-
post:
|
|
127
|
-
x-internal: false
|
|
128
|
-
summary: Refresh upload URLs
|
|
129
|
-
description: |-
|
|
130
|
-
Reissues presigned upload URLs for pending uploads whose URLs have
|
|
131
|
-
expired (each URL's lifetime is in its `X-Amz-Expires` parameter). For a
|
|
132
|
-
single PUT, returns a fresh upload URL; for multipart, returns fresh URLs
|
|
133
|
-
for the requested part numbers plus the complete URL. Already-uploaded
|
|
134
|
-
parts are preserved. Each item is processed independently.
|
|
135
|
-
operationId: refreshStorageUploadUrls
|
|
136
|
-
tags:
|
|
137
|
-
- File Storage
|
|
138
|
-
requestBody:
|
|
139
|
-
required: true
|
|
140
|
-
content:
|
|
141
|
-
application/json:
|
|
142
|
-
schema:
|
|
143
|
-
$ref: '#/components/schemas/RefreshUrlsRequest'
|
|
144
|
-
examples:
|
|
145
|
-
mixed:
|
|
146
|
-
summary: Refresh a single PUT and a multipart batch
|
|
147
|
-
value:
|
|
148
|
-
items:
|
|
149
|
-
- _id: 683b2a0e1c3d5f001a9e8b01
|
|
150
|
-
uploadType: single
|
|
151
|
-
- _id: 683b2a0e1c3d5f001a9e8b03
|
|
152
|
-
uploadType: multipart
|
|
153
|
-
uploadId: abcD12efGHIjklMN3opQrst
|
|
154
|
-
partNumbers:
|
|
155
|
-
- 3
|
|
156
|
-
- 4
|
|
157
|
-
- 5
|
|
158
|
-
responses:
|
|
159
|
-
'200':
|
|
160
|
-
description: Per-item refreshed upload instructions.
|
|
161
|
-
content:
|
|
162
|
-
application/json:
|
|
163
|
-
schema:
|
|
164
|
-
$ref: '#/components/schemas/RefreshUrlsResponse'
|
|
165
|
-
examples:
|
|
166
|
-
default:
|
|
167
|
-
value:
|
|
168
|
-
items:
|
|
169
|
-
- _id: 683b2a0e1c3d5f001a9e8b03
|
|
170
|
-
name: database-export.sql
|
|
171
|
-
statusCode: 200
|
|
172
|
-
body:
|
|
173
|
-
uploadType: multipart
|
|
174
|
-
uploadId: abcD12efGHIjklMN3opQrst
|
|
175
|
-
partUrls:
|
|
176
|
-
- partNumber: 3
|
|
177
|
-
url: https://integrator-file-storage.s3.us-west-2.amazonaws.com/fresh-part-3
|
|
178
|
-
completeUrl: https://integrator-file-storage.s3.us-west-2.amazonaws.com/fresh-complete
|
|
119
|
+
- name: orders.csv
|
|
120
|
+
statusCode: 409
|
|
121
|
+
errors:
|
|
122
|
+
- code: STORAGE_ITEM_ALREADY_EXISTS
|
|
123
|
+
message: An item named "orders.csv" already exists in this folder
|
|
179
124
|
'400':
|
|
180
125
|
$ref: '#/components/responses/400-bad-request'
|
|
181
126
|
'401':
|
|
@@ -406,7 +351,9 @@ paths:
|
|
|
406
351
|
required: false
|
|
407
352
|
description: |-
|
|
408
353
|
Folder whose direct children to list. Omit for the account root.
|
|
409
|
-
Ignored in search mode.
|
|
354
|
+
Ignored in search mode. An id that names no item answers 404
|
|
355
|
+
`STORAGE_PARENT_NOT_FOUND`; a file's id answers 422
|
|
356
|
+
`STORAGE_PARENT_NOT_FOLDER`.
|
|
410
357
|
schema:
|
|
411
358
|
type: string
|
|
412
359
|
format: objectId
|
|
@@ -721,16 +668,41 @@ paths:
|
|
|
721
668
|
'403':
|
|
722
669
|
$ref: '#/components/responses/403-forbidden'
|
|
723
670
|
'404':
|
|
724
|
-
|
|
671
|
+
description: |-
|
|
672
|
+
`_parentId` names no item in the account. Error code:
|
|
673
|
+
`STORAGE_PARENT_NOT_FOUND`.
|
|
674
|
+
content:
|
|
675
|
+
application/json:
|
|
676
|
+
schema:
|
|
677
|
+
$ref: '#/components/schemas/Error'
|
|
678
|
+
examples:
|
|
679
|
+
parentNotFound:
|
|
680
|
+
value:
|
|
681
|
+
errors:
|
|
682
|
+
- code: STORAGE_PARENT_NOT_FOUND
|
|
683
|
+
message: Parent folder not found
|
|
725
684
|
'422':
|
|
726
685
|
description: |-
|
|
727
686
|
A filter is malformed or two filters that cannot be combined were
|
|
728
|
-
sent together
|
|
687
|
+
sent together (`STORAGE_INVALID_FILTER`), or `_parentId` is a file
|
|
688
|
+
rather than a folder (`STORAGE_PARENT_NOT_FOLDER`).
|
|
729
689
|
content:
|
|
730
690
|
application/json:
|
|
731
691
|
schema:
|
|
732
692
|
$ref: '#/components/schemas/Error'
|
|
733
693
|
examples:
|
|
694
|
+
parentNotFolder:
|
|
695
|
+
summary: _parentId is a file
|
|
696
|
+
value:
|
|
697
|
+
errors:
|
|
698
|
+
- code: STORAGE_PARENT_NOT_FOLDER
|
|
699
|
+
message: Parent must be a folder
|
|
700
|
+
invalidParentId:
|
|
701
|
+
summary: _parentId is not an ObjectId
|
|
702
|
+
value:
|
|
703
|
+
errors:
|
|
704
|
+
- code: STORAGE_INVALID_FILTER
|
|
705
|
+
message: _parentId must be a valid ObjectId
|
|
734
706
|
invalidMimeType:
|
|
735
707
|
summary: Media type is not a valid type/subtype pair
|
|
736
708
|
value:
|
|
@@ -755,7 +727,9 @@ paths:
|
|
|
755
727
|
description: |-
|
|
756
728
|
Creates an empty folder. Folders are organizational only — they hold no
|
|
757
729
|
content and do not count against storage quota. To create files, use
|
|
758
|
-
`POST /v1/storage/files/initiateUpload`.
|
|
730
|
+
`POST /v1/storage/files/initiateUpload`. A name already held by a live
|
|
731
|
+
file or folder in the parent is rejected with 409
|
|
732
|
+
`STORAGE_ITEM_ALREADY_EXISTS`.
|
|
759
733
|
operationId: createStorageFolder
|
|
760
734
|
tags:
|
|
761
735
|
- File Storage
|
|
@@ -808,6 +782,20 @@ paths:
|
|
|
808
782
|
$ref: '#/components/responses/403-forbidden'
|
|
809
783
|
'404':
|
|
810
784
|
$ref: '#/components/responses/404-not-found'
|
|
785
|
+
'409':
|
|
786
|
+
description: |-
|
|
787
|
+
A live file or folder with this name already exists in the parent.
|
|
788
|
+
Error code: `STORAGE_ITEM_ALREADY_EXISTS`.
|
|
789
|
+
content:
|
|
790
|
+
application/json:
|
|
791
|
+
schema:
|
|
792
|
+
$ref: '#/components/schemas/Error'
|
|
793
|
+
examples:
|
|
794
|
+
nameTaken:
|
|
795
|
+
value:
|
|
796
|
+
errors:
|
|
797
|
+
- code: STORAGE_ITEM_ALREADY_EXISTS
|
|
798
|
+
message: An item named "Reports" already exists in this folder
|
|
811
799
|
'422':
|
|
812
800
|
$ref: '#/components/responses/422-unprocessable-entity'
|
|
813
801
|
/v1/storage/items/batch:
|
|
@@ -1099,7 +1087,8 @@ paths:
|
|
|
1099
1087
|
'207':
|
|
1100
1088
|
description: |-
|
|
1101
1089
|
Mixed results — at least one item failed to move. Inspect each
|
|
1102
|
-
entry's `status
|
|
1090
|
+
entry's `status`; a destination name collision reports
|
|
1091
|
+
`STORAGE_ITEM_ALREADY_EXISTS` on that entry while the others proceed.
|
|
1103
1092
|
content:
|
|
1104
1093
|
application/json:
|
|
1105
1094
|
schema:
|
|
@@ -1118,6 +1107,10 @@ paths:
|
|
|
1118
1107
|
status: error
|
|
1119
1108
|
errorCode: STORAGE_MOVE_SAME_PARENT_DISALLOWED
|
|
1120
1109
|
message: The item is already in the destination folder
|
|
1110
|
+
- _id: 683b2a0e1c3d5f001a9e8b05
|
|
1111
|
+
status: error
|
|
1112
|
+
errorCode: STORAGE_ITEM_ALREADY_EXISTS
|
|
1113
|
+
message: An item named "Reports" already exists in this folder
|
|
1121
1114
|
'400':
|
|
1122
1115
|
description: |-
|
|
1123
1116
|
Malformed request — `_parentFolderId` key missing
|
|
@@ -1272,9 +1265,10 @@ paths:
|
|
|
1272
1265
|
description: |-
|
|
1273
1266
|
Updates an item's `name` and/or `description`. Renaming keeps the item's
|
|
1274
1267
|
`_id` stable, so references from flows, exports, imports, and tokens
|
|
1275
|
-
survive
|
|
1276
|
-
`
|
|
1277
|
-
`PATCH /v1/storage/items/{_id}/replace
|
|
1268
|
+
survive; a name already held by another live item in the same folder is
|
|
1269
|
+
rejected with 409 `STORAGE_ITEM_ALREADY_EXISTS`. To move an item to a
|
|
1270
|
+
different folder, use `PATCH /v1/storage/items/{_id}/move`; to replace a
|
|
1271
|
+
file's content, use `PATCH /v1/storage/items/{_id}/replace`.
|
|
1278
1272
|
operationId: updateStorageItem
|
|
1279
1273
|
tags:
|
|
1280
1274
|
- File Storage
|
|
@@ -1334,6 +1328,20 @@ paths:
|
|
|
1334
1328
|
$ref: '#/components/responses/403-forbidden'
|
|
1335
1329
|
'404':
|
|
1336
1330
|
$ref: '#/components/responses/404-not-found'
|
|
1331
|
+
'409':
|
|
1332
|
+
description: |-
|
|
1333
|
+
Another live item in the same folder already has the requested
|
|
1334
|
+
`name` (`STORAGE_ITEM_ALREADY_EXISTS`). Nothing was changed.
|
|
1335
|
+
content:
|
|
1336
|
+
application/json:
|
|
1337
|
+
schema:
|
|
1338
|
+
$ref: '#/components/schemas/Error'
|
|
1339
|
+
examples:
|
|
1340
|
+
nameTaken:
|
|
1341
|
+
value:
|
|
1342
|
+
errors:
|
|
1343
|
+
- code: STORAGE_ITEM_ALREADY_EXISTS
|
|
1344
|
+
message: An item named "quarterly-report-final.pdf" already exists in this folder
|
|
1337
1345
|
'422':
|
|
1338
1346
|
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1339
1347
|
delete:
|
|
@@ -1344,10 +1352,16 @@ paths:
|
|
|
1344
1352
|
for 30 days and can be restored with
|
|
1345
1353
|
`POST /v1/storage/items/{_id}/restore`. Deleting a folder also removes
|
|
1346
1354
|
its entire subtree; the folder is removed immediately and its descendants
|
|
1347
|
-
follow asynchronously. Delete is
|
|
1355
|
+
follow asynchronously. Delete is not blocked by references — flows,
|
|
1348
1356
|
exports, imports, and tokens that point at the item are left dangling and
|
|
1349
|
-
fail at runtime
|
|
1350
|
-
|
|
1357
|
+
fail at runtime — with one exception: a folder that is, or contains, the
|
|
1358
|
+
home folder of a File Server account answers 403
|
|
1359
|
+
`STORAGE_SFTP_HOME_FOLDER_PROTECTED` until that account is deleted or moved
|
|
1360
|
+
to another folder (`/v1/mft/fileserver/accounts`). Renaming or moving such
|
|
1361
|
+
a folder is still allowed. A pending multipart upload cannot be deleted
|
|
1362
|
+
here — cancel it with `POST /v1/storage/files/{_id}/cancel`. A pending
|
|
1363
|
+
single PUT upload whose presigned URL is still live is refused with 403
|
|
1364
|
+
`STORAGE_PRESIGNED_URL_ACTIVE`; retry after the URL expires.
|
|
1351
1365
|
operationId: deleteStorageItem
|
|
1352
1366
|
tags:
|
|
1353
1367
|
- File Storage
|
|
@@ -1370,7 +1384,30 @@ paths:
|
|
|
1370
1384
|
'401':
|
|
1371
1385
|
$ref: '#/components/responses/401-unauthorized'
|
|
1372
1386
|
'403':
|
|
1373
|
-
|
|
1387
|
+
description: |-
|
|
1388
|
+
The caller lacks permission for this item; the folder is (or
|
|
1389
|
+
contains) a File Server account's home folder
|
|
1390
|
+
(`STORAGE_SFTP_HOME_FOLDER_PROTECTED` — delete or move the account
|
|
1391
|
+
first); or the item is a pending single PUT upload whose presigned
|
|
1392
|
+
URL has not expired yet (`STORAGE_PRESIGNED_URL_ACTIVE` — the upload
|
|
1393
|
+
may still be in flight, so retry once the URL's lifetime has passed).
|
|
1394
|
+
content:
|
|
1395
|
+
application/json:
|
|
1396
|
+
schema:
|
|
1397
|
+
$ref: '#/components/schemas/Error'
|
|
1398
|
+
examples:
|
|
1399
|
+
sftpHomeFolder:
|
|
1400
|
+
summary: Folder is in use as an SFTP home folder
|
|
1401
|
+
value:
|
|
1402
|
+
errors:
|
|
1403
|
+
- code: STORAGE_SFTP_HOME_FOLDER_PROTECTED
|
|
1404
|
+
message: This folder cannot be deleted because it is in use as an SFTP home folder
|
|
1405
|
+
presignedUrlActive:
|
|
1406
|
+
summary: Pending single PUT upload with a live URL
|
|
1407
|
+
value:
|
|
1408
|
+
errors:
|
|
1409
|
+
- code: STORAGE_PRESIGNED_URL_ACTIVE
|
|
1410
|
+
message: Presigned upload URL is still active; retry after it expires
|
|
1374
1411
|
'404':
|
|
1375
1412
|
$ref: '#/components/responses/404-not-found'
|
|
1376
1413
|
'422':
|
|
@@ -1628,7 +1665,10 @@ paths:
|
|
|
1628
1665
|
quota is unaffected. Moving a folder re-parents the folder immediately and
|
|
1629
1666
|
re-anchors its descendants asynchronously, so the response reflects only
|
|
1630
1667
|
the moved item itself. A folder cannot be moved into itself or one of its
|
|
1631
|
-
own descendants.
|
|
1668
|
+
own descendants. A destination that already holds a live item with the
|
|
1669
|
+
same name rejects the move with 409 `STORAGE_ITEM_ALREADY_EXISTS` — send
|
|
1670
|
+
`name` to land beside it, or fold a folder into its namesake with
|
|
1671
|
+
`POST /v1/storage/items/{_id}/merge`.
|
|
1632
1672
|
operationId: moveStorageItem
|
|
1633
1673
|
tags:
|
|
1634
1674
|
- File Storage
|
|
@@ -1734,6 +1774,21 @@ paths:
|
|
|
1734
1774
|
$ref: '#/components/responses/403-forbidden'
|
|
1735
1775
|
'404':
|
|
1736
1776
|
$ref: '#/components/responses/404-not-found'
|
|
1777
|
+
'409':
|
|
1778
|
+
description: |-
|
|
1779
|
+
The destination already holds a live item with the moved item's
|
|
1780
|
+
name — or with the `name` sent (`STORAGE_ITEM_ALREADY_EXISTS`).
|
|
1781
|
+
Nothing was moved.
|
|
1782
|
+
content:
|
|
1783
|
+
application/json:
|
|
1784
|
+
schema:
|
|
1785
|
+
$ref: '#/components/schemas/Error'
|
|
1786
|
+
examples:
|
|
1787
|
+
nameTaken:
|
|
1788
|
+
value:
|
|
1789
|
+
errors:
|
|
1790
|
+
- code: STORAGE_ITEM_ALREADY_EXISTS
|
|
1791
|
+
message: An item named "inv-001.pdf" already exists in this folder
|
|
1737
1792
|
'422':
|
|
1738
1793
|
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1739
1794
|
/v1/storage/items/{_id}/copy:
|
|
@@ -1741,11 +1796,12 @@ paths:
|
|
|
1741
1796
|
x-internal: false
|
|
1742
1797
|
summary: Copy a file
|
|
1743
1798
|
description: |-
|
|
1744
|
-
Creates an independent copy of a file in
|
|
1745
|
-
`_id` and its own copy of the content. Consumes quota equal to
|
|
1746
|
-
file's size. Files only — folder copy is not supported.
|
|
1747
|
-
|
|
1748
|
-
|
|
1799
|
+
Creates an independent copy of a file in the folder named by `_parentId`,
|
|
1800
|
+
with a new `_id` and its own copy of the content. Consumes quota equal to
|
|
1801
|
+
the source file's size. Files only — folder copy is not supported.
|
|
1802
|
+
Without `name` the copy is called `Clone - ` followed by the source
|
|
1803
|
+
file's name; a name already held by a live item in the destination is
|
|
1804
|
+
rejected with 409 `STORAGE_ITEM_ALREADY_EXISTS`.
|
|
1749
1805
|
operationId: copyStorageFile
|
|
1750
1806
|
tags:
|
|
1751
1807
|
- File Storage
|
|
@@ -1770,12 +1826,12 @@ paths:
|
|
|
1770
1826
|
rename:
|
|
1771
1827
|
summary: Copy into a folder with a new name
|
|
1772
1828
|
value:
|
|
1773
|
-
|
|
1829
|
+
_parentId: 684c3b1f2d4e6g002b0h9c34
|
|
1774
1830
|
name: quarterly-report-copy.pdf
|
|
1775
1831
|
toRoot:
|
|
1776
|
-
summary: Copy to the account root
|
|
1832
|
+
summary: Copy to the account root as "Clone - <source name>"
|
|
1777
1833
|
value:
|
|
1778
|
-
|
|
1834
|
+
_parentId: null
|
|
1779
1835
|
responses:
|
|
1780
1836
|
'201':
|
|
1781
1837
|
description: The newly created copy.
|
|
@@ -1809,6 +1865,20 @@ paths:
|
|
|
1809
1865
|
$ref: '#/components/responses/403-forbidden'
|
|
1810
1866
|
'404':
|
|
1811
1867
|
$ref: '#/components/responses/404-not-found'
|
|
1868
|
+
'409':
|
|
1869
|
+
description: |-
|
|
1870
|
+
A live item with the copy's name already exists in the destination
|
|
1871
|
+
(`STORAGE_ITEM_ALREADY_EXISTS`). Retry with a different `name`.
|
|
1872
|
+
content:
|
|
1873
|
+
application/json:
|
|
1874
|
+
schema:
|
|
1875
|
+
$ref: '#/components/schemas/Error'
|
|
1876
|
+
examples:
|
|
1877
|
+
nameTaken:
|
|
1878
|
+
value:
|
|
1879
|
+
errors:
|
|
1880
|
+
- code: STORAGE_ITEM_ALREADY_EXISTS
|
|
1881
|
+
message: An item named "Clone - quarterly-report.pdf" already exists in this folder
|
|
1812
1882
|
'422':
|
|
1813
1883
|
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1814
1884
|
/v1/storage/items/{_id}/restore:
|
|
@@ -1821,7 +1891,9 @@ paths:
|
|
|
1821
1891
|
removed with it; the folder comes back immediately and its descendants
|
|
1822
1892
|
follow asynchronously. Only items deleted directly can be restored — a
|
|
1823
1893
|
descendant removed by its parent's deletion comes back only when that
|
|
1824
|
-
parent folder is restored.
|
|
1894
|
+
parent folder is restored. If a live item has taken the name in the
|
|
1895
|
+
original folder since the delete, the restore is rejected with 409
|
|
1896
|
+
`STORAGE_ITEM_ALREADY_EXISTS`; send `name` to restore under a new one.
|
|
1825
1897
|
operationId: restoreStorageItem
|
|
1826
1898
|
tags:
|
|
1827
1899
|
- File Storage
|
|
@@ -1836,17 +1908,67 @@ paths:
|
|
|
1836
1908
|
x-celigo-refModel: storageitems
|
|
1837
1909
|
examples:
|
|
1838
1910
|
- 683b2a0e1c3d5f001a9e8b01
|
|
1911
|
+
requestBody:
|
|
1912
|
+
required: false
|
|
1913
|
+
content:
|
|
1914
|
+
application/json:
|
|
1915
|
+
schema:
|
|
1916
|
+
$ref: '#/components/schemas/RestoreRequest'
|
|
1917
|
+
examples:
|
|
1918
|
+
keepName:
|
|
1919
|
+
summary: Restore under the original name
|
|
1920
|
+
value: {}
|
|
1921
|
+
rename:
|
|
1922
|
+
summary: Restore under a new name because the original is taken
|
|
1923
|
+
value:
|
|
1924
|
+
name: inv-001 (restored).pdf
|
|
1839
1925
|
responses:
|
|
1840
|
-
'
|
|
1926
|
+
'200':
|
|
1841
1927
|
description: |-
|
|
1842
|
-
|
|
1843
|
-
follow asynchronously.
|
|
1928
|
+
The restored item. For a folder, the root is restored and its
|
|
1929
|
+
descendants follow asynchronously.
|
|
1930
|
+
content:
|
|
1931
|
+
application/json:
|
|
1932
|
+
schema:
|
|
1933
|
+
$ref: '#/components/schemas/StorageItem'
|
|
1934
|
+
examples:
|
|
1935
|
+
default:
|
|
1936
|
+
value:
|
|
1937
|
+
_id: 683b2a0e1c3d5f001a9e8b01
|
|
1938
|
+
_userId: 624cb0346309dc3a543733a2
|
|
1939
|
+
_parentId: 683a1f2e9b0c4d001e8f7a23
|
|
1940
|
+
__ancestorIds:
|
|
1941
|
+
- 683a1f2e9b0c4d001e8f7a23
|
|
1942
|
+
_integrationId: null
|
|
1943
|
+
type: file
|
|
1944
|
+
name: inv-001 (restored).pdf
|
|
1945
|
+
size: 245760
|
|
1946
|
+
mimeType: application/pdf
|
|
1947
|
+
status: active
|
|
1948
|
+
isSystem: false
|
|
1949
|
+
createdAt: '2026-03-28T10:00:00.000Z'
|
|
1950
|
+
lastModified: '2026-04-28T09:15:00.000Z'
|
|
1844
1951
|
'401':
|
|
1845
1952
|
$ref: '#/components/responses/401-unauthorized'
|
|
1846
1953
|
'403':
|
|
1847
1954
|
$ref: '#/components/responses/403-forbidden'
|
|
1848
1955
|
'404':
|
|
1849
1956
|
$ref: '#/components/responses/404-not-found'
|
|
1957
|
+
'409':
|
|
1958
|
+
description: |-
|
|
1959
|
+
A live item in the original folder already has the item's name — or
|
|
1960
|
+
the `name` sent (`STORAGE_ITEM_ALREADY_EXISTS`). The item stays in
|
|
1961
|
+
the recycle bin.
|
|
1962
|
+
content:
|
|
1963
|
+
application/json:
|
|
1964
|
+
schema:
|
|
1965
|
+
$ref: '#/components/schemas/Error'
|
|
1966
|
+
examples:
|
|
1967
|
+
nameTaken:
|
|
1968
|
+
value:
|
|
1969
|
+
errors:
|
|
1970
|
+
- code: STORAGE_ITEM_ALREADY_EXISTS
|
|
1971
|
+
message: An item named "inv-001.pdf" already exists in this folder
|
|
1850
1972
|
'422':
|
|
1851
1973
|
$ref: '#/components/responses/422-unprocessable-entity'
|
|
1852
1974
|
/v1/storage/items/{_id}/purge:
|
|
@@ -2250,7 +2372,11 @@ components:
|
|
|
2250
2372
|
name:
|
|
2251
2373
|
type: string
|
|
2252
2374
|
maxLength: 256
|
|
2253
|
-
description:
|
|
2375
|
+
description: |-
|
|
2376
|
+
File name, including extension. Must not match a live file or folder
|
|
2377
|
+
in the target folder (case-sensitive; a pending upload already holds
|
|
2378
|
+
its name), or the entry fails with 409 `STORAGE_ITEM_ALREADY_EXISTS`
|
|
2379
|
+
while the rest of the batch proceeds.
|
|
2254
2380
|
examples:
|
|
2255
2381
|
- logo.png
|
|
2256
2382
|
mimeType:
|
|
@@ -2382,8 +2508,10 @@ components:
|
|
|
2382
2508
|
Present when uploadType is single. The PUT must carry the header
|
|
2383
2509
|
`x-amz-server-side-encryption: AES256` — it is part of the signature,
|
|
2384
2510
|
and S3 rejects the upload with 403 `SignatureDoesNotMatch` without
|
|
2385
|
-
it. The URL's `X-Amz-Expires` parameter carries its lifetime
|
|
2386
|
-
|
|
2511
|
+
it. The URL's `X-Amz-Expires` parameter carries its lifetime and
|
|
2512
|
+
there is no endpoint to reissue it: an expired single PUT means
|
|
2513
|
+
starting a new upload. While the URL is live the pending item holds
|
|
2514
|
+
its name and cannot be deleted (`STORAGE_PRESIGNED_URL_ACTIVE`).
|
|
2387
2515
|
examples:
|
|
2388
2516
|
- https://integrator-file-storage.s3.us-west-2.amazonaws.com/...
|
|
2389
2517
|
x-celigo-ai-guidance:
|
|
@@ -2392,8 +2520,9 @@ components:
|
|
|
2392
2520
|
type: string
|
|
2393
2521
|
description: |-
|
|
2394
2522
|
S3 multipart upload identifier. Present when uploadType is
|
|
2395
|
-
multipart.
|
|
2396
|
-
to
|
|
2523
|
+
multipart. Send it back to `POST /v1/storage/files/initiateUpload`
|
|
2524
|
+
with the item's `_id` and `issuedPartsCount` to fetch the next batch
|
|
2525
|
+
of part URLs once every part already issued has been uploaded.
|
|
2397
2526
|
examples:
|
|
2398
2527
|
- abcD12efGHIjklMN3opQrst
|
|
2399
2528
|
partUrls:
|
|
@@ -2401,8 +2530,11 @@ components:
|
|
|
2401
2530
|
description: |-
|
|
2402
2531
|
Presigned URLs for the next batch of parts. Present when uploadType
|
|
2403
2532
|
is multipart. A request may return fewer parts than requested when
|
|
2404
|
-
the account-wide part budget is constrained;
|
|
2405
|
-
parts
|
|
2533
|
+
the account-wide part budget is constrained; after uploading every
|
|
2534
|
+
part in this batch, fetch the remaining parts by posting to
|
|
2535
|
+
initiateUpload again with the item's `_id`, `uploadId`, and
|
|
2536
|
+
`issuedPartsCount` — before then the entry fails with
|
|
2537
|
+
`STORAGE_PARTS_MISMATCH`.
|
|
2406
2538
|
items:
|
|
2407
2539
|
$ref: '#/components/schemas/PartUrl'
|
|
2408
2540
|
completeUrl:
|
|
@@ -2449,7 +2581,8 @@ components:
|
|
|
2449
2581
|
description: |-
|
|
2450
2582
|
ID of the pending item this result refers to. Present once the item
|
|
2451
2583
|
is created; absent when the file failed validation before creation.
|
|
2452
|
-
Use it to
|
|
2584
|
+
Use it to continue a multipart upload, cancel it, or download the
|
|
2585
|
+
file once active.
|
|
2453
2586
|
examples:
|
|
2454
2587
|
- 683b2a0e1c3d5f001a9e8b01
|
|
2455
2588
|
name:
|
|
@@ -2519,66 +2652,6 @@ components:
|
|
|
2519
2652
|
- message
|
|
2520
2653
|
required:
|
|
2521
2654
|
- errors
|
|
2522
|
-
RefreshUrlsRequest:
|
|
2523
|
-
type: object
|
|
2524
|
-
description: Reissues presigned URLs for pending uploads whose URLs have expired.
|
|
2525
|
-
required:
|
|
2526
|
-
- items
|
|
2527
|
-
properties:
|
|
2528
|
-
items:
|
|
2529
|
-
type: array
|
|
2530
|
-
minItems: 1
|
|
2531
|
-
description: Pending uploads to refresh. Each is processed independently.
|
|
2532
|
-
items:
|
|
2533
|
-
type: object
|
|
2534
|
-
required:
|
|
2535
|
-
- _id
|
|
2536
|
-
- uploadType
|
|
2537
|
-
properties:
|
|
2538
|
-
_id:
|
|
2539
|
-
type: string
|
|
2540
|
-
format: objectId
|
|
2541
|
-
x-celigo-refModel: storageitems
|
|
2542
|
-
description: Pending item to reissue URLs for.
|
|
2543
|
-
examples:
|
|
2544
|
-
- 683b2a0e1c3d5f001a9e8b03
|
|
2545
|
-
uploadType:
|
|
2546
|
-
type: string
|
|
2547
|
-
enum:
|
|
2548
|
-
- single
|
|
2549
|
-
- multipart
|
|
2550
|
-
x-enumDescriptions:
|
|
2551
|
-
single: Reissue the single PUT URL.
|
|
2552
|
-
multipart: Reissue URLs for the part numbers in `partNumbers`.
|
|
2553
|
-
description: Must match the upload type the item was initiated with.
|
|
2554
|
-
uploadId:
|
|
2555
|
-
type: string
|
|
2556
|
-
description: S3 multipart upload ID. Required when uploadType is multipart.
|
|
2557
|
-
examples:
|
|
2558
|
-
- abcD12efGHIjklMN3opQrst
|
|
2559
|
-
partNumbers:
|
|
2560
|
-
type: array
|
|
2561
|
-
description: |-
|
|
2562
|
-
Part numbers to reissue URLs for. Required when uploadType is
|
|
2563
|
-
multipart. Must continue sequentially after the last issued
|
|
2564
|
-
batch. Already-uploaded parts are preserved.
|
|
2565
|
-
items:
|
|
2566
|
-
type: integer
|
|
2567
|
-
minimum: 1
|
|
2568
|
-
examples:
|
|
2569
|
-
- - 3
|
|
2570
|
-
- 4
|
|
2571
|
-
- 5
|
|
2572
|
-
RefreshUrlsResponse:
|
|
2573
|
-
type: object
|
|
2574
|
-
description: Per-item refreshed upload instructions.
|
|
2575
|
-
required:
|
|
2576
|
-
- items
|
|
2577
|
-
properties:
|
|
2578
|
-
items:
|
|
2579
|
-
type: array
|
|
2580
|
-
items:
|
|
2581
|
-
$ref: '#/components/schemas/UploadResult'
|
|
2582
2655
|
StorageItem:
|
|
2583
2656
|
type: object
|
|
2584
2657
|
description: A file or folder stored in Celigo Storage.
|
|
@@ -2611,8 +2684,11 @@ components:
|
|
|
2611
2684
|
maxLength: 256
|
|
2612
2685
|
description: |-
|
|
2613
2686
|
Display name, including the extension for files (for example
|
|
2614
|
-
`orders.csv`).
|
|
2615
|
-
|
|
2687
|
+
`orders.csv`). Unique among the live items of one folder: files and
|
|
2688
|
+
folders share the namespace, matching is case-sensitive, and a
|
|
2689
|
+
pending upload holds its name. Any write that would duplicate a name
|
|
2690
|
+
is rejected with 409 `STORAGE_ITEM_ALREADY_EXISTS`; items in the
|
|
2691
|
+
recycle bin release theirs.
|
|
2616
2692
|
examples:
|
|
2617
2693
|
- logo.png
|
|
2618
2694
|
_userId:
|
|
@@ -2795,7 +2871,10 @@ components:
|
|
|
2795
2871
|
name:
|
|
2796
2872
|
type: string
|
|
2797
2873
|
maxLength: 256
|
|
2798
|
-
description:
|
|
2874
|
+
description: |-
|
|
2875
|
+
Folder name. Must not match a live file or folder already in the
|
|
2876
|
+
parent (case-sensitive); a duplicate is rejected with 409
|
|
2877
|
+
`STORAGE_ITEM_ALREADY_EXISTS`.
|
|
2799
2878
|
examples:
|
|
2800
2879
|
- Reports
|
|
2801
2880
|
_parentId:
|
|
@@ -2879,7 +2958,10 @@ components:
|
|
|
2879
2958
|
description: Type of the moved item. Present on success.
|
|
2880
2959
|
errorCode:
|
|
2881
2960
|
type: string
|
|
2882
|
-
description:
|
|
2961
|
+
description: |-
|
|
2962
|
+
Error code for this item, such as `STORAGE_ITEM_ALREADY_EXISTS`
|
|
2963
|
+
when the destination already holds a live item with that name.
|
|
2964
|
+
Present on error.
|
|
2883
2965
|
message:
|
|
2884
2966
|
type: string
|
|
2885
2967
|
description: Human-readable failure reason. Present on error.
|
|
@@ -2893,7 +2975,10 @@ components:
|
|
|
2893
2975
|
name:
|
|
2894
2976
|
type: string
|
|
2895
2977
|
maxLength: 256
|
|
2896
|
-
description:
|
|
2978
|
+
description: |-
|
|
2979
|
+
New display name for the item. Must not match another live item in
|
|
2980
|
+
the same folder (case-sensitive); a collision is rejected with 409
|
|
2981
|
+
`STORAGE_ITEM_ALREADY_EXISTS`.
|
|
2897
2982
|
examples:
|
|
2898
2983
|
- quarterly-report-final.pdf
|
|
2899
2984
|
description:
|
|
@@ -3020,7 +3105,7 @@ components:
|
|
|
3020
3105
|
type: object
|
|
3021
3106
|
description: Request body for copying a file.
|
|
3022
3107
|
properties:
|
|
3023
|
-
|
|
3108
|
+
_parentId:
|
|
3024
3109
|
type:
|
|
3025
3110
|
- string
|
|
3026
3111
|
- 'null'
|
|
@@ -3028,18 +3113,37 @@ components:
|
|
|
3028
3113
|
x-celigo-refModel: storageitems
|
|
3029
3114
|
description: |-
|
|
3030
3115
|
Destination folder for the copy. Pass null to copy to the account
|
|
3031
|
-
root
|
|
3116
|
+
root; omit it to copy into the source file's own folder. An id that
|
|
3117
|
+
names no folder answers 404 `STORAGE_PARENT_NOT_FOUND`, and a file's
|
|
3118
|
+
id 422 `STORAGE_PARENT_NOT_FOLDER`.
|
|
3032
3119
|
examples:
|
|
3033
3120
|
- 684c3b1f2d4e6g002b0h9c34
|
|
3034
3121
|
name:
|
|
3035
3122
|
type: string
|
|
3036
3123
|
maxLength: 256
|
|
3037
3124
|
description: |-
|
|
3038
|
-
Name for the copy.
|
|
3039
|
-
|
|
3040
|
-
|
|
3125
|
+
Name for the copy. When omitted, the copy is called `Clone - `
|
|
3126
|
+
followed by the source file's name. Must not match a live item in
|
|
3127
|
+
the destination (case-sensitive): a collision is rejected with 409
|
|
3128
|
+
`STORAGE_ITEM_ALREADY_EXISTS`, so a second unnamed copy into the
|
|
3129
|
+
same folder needs an explicit name.
|
|
3041
3130
|
examples:
|
|
3042
3131
|
- quarterly-report-copy.pdf
|
|
3132
|
+
RestoreRequest:
|
|
3133
|
+
type: object
|
|
3134
|
+
description: |-
|
|
3135
|
+
Optional request body for restoring an item from the recycle bin. Send
|
|
3136
|
+
an empty body or omit it to restore under the original name.
|
|
3137
|
+
properties:
|
|
3138
|
+
name:
|
|
3139
|
+
type: string
|
|
3140
|
+
maxLength: 256
|
|
3141
|
+
description: |-
|
|
3142
|
+
New name applied as the item comes back, so a name taken in its
|
|
3143
|
+
original folder since the delete can be resolved in the same call.
|
|
3144
|
+
Omit to keep the original name.
|
|
3145
|
+
examples:
|
|
3146
|
+
- inv-001 (restored).pdf
|
|
3043
3147
|
StorageAuditEntry:
|
|
3044
3148
|
type: object
|
|
3045
3149
|
description: |-
|