@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.
@@ -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; reissue expired URLs with
39
- `POST /v1/storage/files/refresh-urls`. Each file is validated
40
- independently, so the response can mix per-file successes and failures
41
- while the request itself returns 200.
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 a rejection
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
- '400':
116
- $ref: '#/components/responses/400-bad-request'
117
- '401':
118
- $ref: '#/components/responses/401-unauthorized'
119
- '403':
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
- $ref: '#/components/responses/404-not-found'
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. Error code: `STORAGE_INVALID_FILTER`.
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. To move an item to a different folder, use
1276
- `PATCH /v1/storage/items/{_id}/move`; to replace a file's content, use
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 never blocked by references — flows,
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. A pending multipart upload cannot be deleted here —
1350
- cancel it with `POST /v1/storage/files/{_id}/cancel`.
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
- $ref: '#/components/responses/403-forbidden'
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 a destination folder, with a new
1745
- `_id` and its own copy of the content. Consumes quota equal to the source
1746
- file's size. Files only — folder copy is not supported. Names are not
1747
- deduplicated, so copying into the source's own folder without a new name
1748
- produces a second file with the same name.
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
- _destinationId: 684c3b1f2d4e6g002b0h9c34
1829
+ _parentId: 684c3b1f2d4e6g002b0h9c34
1774
1830
  name: quarterly-report-copy.pdf
1775
1831
  toRoot:
1776
- summary: Copy to the account root, keeping the name
1832
+ summary: Copy to the account root as "Clone - <source name>"
1777
1833
  value:
1778
- _destinationId: null
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
- '204':
1926
+ '200':
1841
1927
  description: |-
1842
- Item restored. For a folder, the root is restored and its descendants
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: File name, including extension. Duplicate names in a folder are allowed.
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; use
2386
- `POST /v1/storage/files/refresh-urls` to reissue an expired one.
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. Pass it to refresh-urls to fetch later part batches and
2396
- to cancel the upload.
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; fetch the remaining
2405
- parts with refresh-urls.
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 upload, refresh URLs, cancel, or download once active.
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`). Two items with the same name can coexist in one
2615
- folder — the name is not a unique key.
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: Folder name. Duplicate names within the same parent are allowed.
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: Error code for this item. Present on error.
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: New display name for the item.
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
- _destinationId:
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. Must reference an existing active folder.
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. Defaults to the source file's name when omitted.
3039
- Duplicate names are allowed, so a copy into the source's own folder
3040
- with no name produces a second file with the same name.
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: |-