@celigo/api-specs 0.2.93 → 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:
@@ -1351,7 +1359,9 @@ paths:
1351
1359
  `STORAGE_SFTP_HOME_FOLDER_PROTECTED` until that account is deleted or moved
1352
1360
  to another folder (`/v1/mft/fileserver/accounts`). Renaming or moving such
1353
1361
  a folder is still allowed. A pending multipart upload cannot be deleted
1354
- here — cancel it with `POST /v1/storage/files/{_id}/cancel`.
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.
1355
1365
  operationId: deleteStorageItem
1356
1366
  tags:
1357
1367
  - File Storage
@@ -1375,10 +1385,12 @@ paths:
1375
1385
  $ref: '#/components/responses/401-unauthorized'
1376
1386
  '403':
1377
1387
  description: |-
1378
- The caller lacks permission for this item, or the folder is (or
1379
- contains) a File Server account's home folder. Error code:
1380
- `STORAGE_SFTP_HOME_FOLDER_PROTECTED` for the latter — delete or move
1381
- the account first.
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).
1382
1394
  content:
1383
1395
  application/json:
1384
1396
  schema:
@@ -1390,6 +1402,12 @@ paths:
1390
1402
  errors:
1391
1403
  - code: STORAGE_SFTP_HOME_FOLDER_PROTECTED
1392
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
1393
1411
  '404':
1394
1412
  $ref: '#/components/responses/404-not-found'
1395
1413
  '422':
@@ -1647,7 +1665,10 @@ paths:
1647
1665
  quota is unaffected. Moving a folder re-parents the folder immediately and
1648
1666
  re-anchors its descendants asynchronously, so the response reflects only
1649
1667
  the moved item itself. A folder cannot be moved into itself or one of its
1650
- 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`.
1651
1672
  operationId: moveStorageItem
1652
1673
  tags:
1653
1674
  - File Storage
@@ -1753,6 +1774,21 @@ paths:
1753
1774
  $ref: '#/components/responses/403-forbidden'
1754
1775
  '404':
1755
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
1756
1792
  '422':
1757
1793
  $ref: '#/components/responses/422-unprocessable-entity'
1758
1794
  /v1/storage/items/{_id}/copy:
@@ -1760,11 +1796,12 @@ paths:
1760
1796
  x-internal: false
1761
1797
  summary: Copy a file
1762
1798
  description: |-
1763
- Creates an independent copy of a file in a destination folder, with a new
1764
- `_id` and its own copy of the content. Consumes quota equal to the source
1765
- file's size. Files only — folder copy is not supported. Names are not
1766
- deduplicated, so copying into the source's own folder without a new name
1767
- 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`.
1768
1805
  operationId: copyStorageFile
1769
1806
  tags:
1770
1807
  - File Storage
@@ -1789,12 +1826,12 @@ paths:
1789
1826
  rename:
1790
1827
  summary: Copy into a folder with a new name
1791
1828
  value:
1792
- _destinationId: 684c3b1f2d4e6g002b0h9c34
1829
+ _parentId: 684c3b1f2d4e6g002b0h9c34
1793
1830
  name: quarterly-report-copy.pdf
1794
1831
  toRoot:
1795
- summary: Copy to the account root, keeping the name
1832
+ summary: Copy to the account root as "Clone - <source name>"
1796
1833
  value:
1797
- _destinationId: null
1834
+ _parentId: null
1798
1835
  responses:
1799
1836
  '201':
1800
1837
  description: The newly created copy.
@@ -1828,6 +1865,20 @@ paths:
1828
1865
  $ref: '#/components/responses/403-forbidden'
1829
1866
  '404':
1830
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
1831
1882
  '422':
1832
1883
  $ref: '#/components/responses/422-unprocessable-entity'
1833
1884
  /v1/storage/items/{_id}/restore:
@@ -1840,7 +1891,9 @@ paths:
1840
1891
  removed with it; the folder comes back immediately and its descendants
1841
1892
  follow asynchronously. Only items deleted directly can be restored — a
1842
1893
  descendant removed by its parent's deletion comes back only when that
1843
- 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.
1844
1897
  operationId: restoreStorageItem
1845
1898
  tags:
1846
1899
  - File Storage
@@ -1855,17 +1908,67 @@ paths:
1855
1908
  x-celigo-refModel: storageitems
1856
1909
  examples:
1857
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
1858
1925
  responses:
1859
- '204':
1926
+ '200':
1860
1927
  description: |-
1861
- Item restored. For a folder, the root is restored and its descendants
1862
- 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'
1863
1951
  '401':
1864
1952
  $ref: '#/components/responses/401-unauthorized'
1865
1953
  '403':
1866
1954
  $ref: '#/components/responses/403-forbidden'
1867
1955
  '404':
1868
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
1869
1972
  '422':
1870
1973
  $ref: '#/components/responses/422-unprocessable-entity'
1871
1974
  /v1/storage/items/{_id}/purge:
@@ -2269,7 +2372,11 @@ components:
2269
2372
  name:
2270
2373
  type: string
2271
2374
  maxLength: 256
2272
- 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.
2273
2380
  examples:
2274
2381
  - logo.png
2275
2382
  mimeType:
@@ -2401,8 +2508,10 @@ components:
2401
2508
  Present when uploadType is single. The PUT must carry the header
2402
2509
  `x-amz-server-side-encryption: AES256` — it is part of the signature,
2403
2510
  and S3 rejects the upload with 403 `SignatureDoesNotMatch` without
2404
- it. The URL's `X-Amz-Expires` parameter carries its lifetime; use
2405
- `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`).
2406
2515
  examples:
2407
2516
  - https://integrator-file-storage.s3.us-west-2.amazonaws.com/...
2408
2517
  x-celigo-ai-guidance:
@@ -2411,8 +2520,9 @@ components:
2411
2520
  type: string
2412
2521
  description: |-
2413
2522
  S3 multipart upload identifier. Present when uploadType is
2414
- multipart. Pass it to refresh-urls to fetch later part batches and
2415
- 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.
2416
2526
  examples:
2417
2527
  - abcD12efGHIjklMN3opQrst
2418
2528
  partUrls:
@@ -2420,8 +2530,11 @@ components:
2420
2530
  description: |-
2421
2531
  Presigned URLs for the next batch of parts. Present when uploadType
2422
2532
  is multipart. A request may return fewer parts than requested when
2423
- the account-wide part budget is constrained; fetch the remaining
2424
- 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`.
2425
2538
  items:
2426
2539
  $ref: '#/components/schemas/PartUrl'
2427
2540
  completeUrl:
@@ -2468,7 +2581,8 @@ components:
2468
2581
  description: |-
2469
2582
  ID of the pending item this result refers to. Present once the item
2470
2583
  is created; absent when the file failed validation before creation.
2471
- 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.
2472
2586
  examples:
2473
2587
  - 683b2a0e1c3d5f001a9e8b01
2474
2588
  name:
@@ -2538,66 +2652,6 @@ components:
2538
2652
  - message
2539
2653
  required:
2540
2654
  - errors
2541
- RefreshUrlsRequest:
2542
- type: object
2543
- description: Reissues presigned URLs for pending uploads whose URLs have expired.
2544
- required:
2545
- - items
2546
- properties:
2547
- items:
2548
- type: array
2549
- minItems: 1
2550
- description: Pending uploads to refresh. Each is processed independently.
2551
- items:
2552
- type: object
2553
- required:
2554
- - _id
2555
- - uploadType
2556
- properties:
2557
- _id:
2558
- type: string
2559
- format: objectId
2560
- x-celigo-refModel: storageitems
2561
- description: Pending item to reissue URLs for.
2562
- examples:
2563
- - 683b2a0e1c3d5f001a9e8b03
2564
- uploadType:
2565
- type: string
2566
- enum:
2567
- - single
2568
- - multipart
2569
- x-enumDescriptions:
2570
- single: Reissue the single PUT URL.
2571
- multipart: Reissue URLs for the part numbers in `partNumbers`.
2572
- description: Must match the upload type the item was initiated with.
2573
- uploadId:
2574
- type: string
2575
- description: S3 multipart upload ID. Required when uploadType is multipart.
2576
- examples:
2577
- - abcD12efGHIjklMN3opQrst
2578
- partNumbers:
2579
- type: array
2580
- description: |-
2581
- Part numbers to reissue URLs for. Required when uploadType is
2582
- multipart. Must continue sequentially after the last issued
2583
- batch. Already-uploaded parts are preserved.
2584
- items:
2585
- type: integer
2586
- minimum: 1
2587
- examples:
2588
- - - 3
2589
- - 4
2590
- - 5
2591
- RefreshUrlsResponse:
2592
- type: object
2593
- description: Per-item refreshed upload instructions.
2594
- required:
2595
- - items
2596
- properties:
2597
- items:
2598
- type: array
2599
- items:
2600
- $ref: '#/components/schemas/UploadResult'
2601
2655
  StorageItem:
2602
2656
  type: object
2603
2657
  description: A file or folder stored in Celigo Storage.
@@ -2630,8 +2684,11 @@ components:
2630
2684
  maxLength: 256
2631
2685
  description: |-
2632
2686
  Display name, including the extension for files (for example
2633
- `orders.csv`). Two items with the same name can coexist in one
2634
- 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.
2635
2692
  examples:
2636
2693
  - logo.png
2637
2694
  _userId:
@@ -2814,7 +2871,10 @@ components:
2814
2871
  name:
2815
2872
  type: string
2816
2873
  maxLength: 256
2817
- 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`.
2818
2878
  examples:
2819
2879
  - Reports
2820
2880
  _parentId:
@@ -2898,7 +2958,10 @@ components:
2898
2958
  description: Type of the moved item. Present on success.
2899
2959
  errorCode:
2900
2960
  type: string
2901
- 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.
2902
2965
  message:
2903
2966
  type: string
2904
2967
  description: Human-readable failure reason. Present on error.
@@ -2912,7 +2975,10 @@ components:
2912
2975
  name:
2913
2976
  type: string
2914
2977
  maxLength: 256
2915
- 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`.
2916
2982
  examples:
2917
2983
  - quarterly-report-final.pdf
2918
2984
  description:
@@ -3039,7 +3105,7 @@ components:
3039
3105
  type: object
3040
3106
  description: Request body for copying a file.
3041
3107
  properties:
3042
- _destinationId:
3108
+ _parentId:
3043
3109
  type:
3044
3110
  - string
3045
3111
  - 'null'
@@ -3047,18 +3113,37 @@ components:
3047
3113
  x-celigo-refModel: storageitems
3048
3114
  description: |-
3049
3115
  Destination folder for the copy. Pass null to copy to the account
3050
- 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`.
3051
3119
  examples:
3052
3120
  - 684c3b1f2d4e6g002b0h9c34
3053
3121
  name:
3054
3122
  type: string
3055
3123
  maxLength: 256
3056
3124
  description: |-
3057
- Name for the copy. Defaults to the source file's name when omitted.
3058
- Duplicate names are allowed, so a copy into the source's own folder
3059
- 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.
3060
3130
  examples:
3061
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
3062
3147
  StorageAuditEntry:
3063
3148
  type: object
3064
3149
  description: |-